不同DPI设置下的GetWindowRect获取到的坐标不一致

昨天BOSS突然过来说,我们的屏幕共享在Windows Surface上共享程序时,实际共享的区域不对,顿时有些晕了,然后找了台win8的电脑,没有这个问题。经过观察发现,原本1080P的屏幕,实际上通过GetWindowRect获取到的只有720P。然后就是各种BG,发现http://www.cppblog.com/weiym/archive/2014/02/18/205841.aspx此文,原来windows会对高DPI下的坐标进行缩放,可在控制面板->显示->使阅读屏幕上的内容更容易 进行配置,PC上默认配置都是100%,所以没有问题,Windows Surface上默认配置的150%,问题就来了,相当于windows把720p的坐标系拉伸到1080p的屏幕上,而我们获取的坐标仍然是在720p的,而我真正抓取的屏幕图像是在1080p上的,导致区域位置和大小都不正确.

那怎么转换呢,把GetWindowRect获取到的坐标*拉伸比(150%)就得到了在屏幕上的坐标了.怎么获取拉伸比呢?又BG到http://blog.csdn.net/puncha/article/details/8239174此文,可以使用dc.GetDeviceCaps(LOGPIXELSX)/96获取到拉伸比,96是windows默认的dpi,如此便搞定了~~

文章分类 疑难杂症

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>