公司有一个屏幕书写的软件,06年开始开发的,至今已八年之久,目前处于维护阶段,在接到这个任务前我也没机会接触这个项目的代码
日前,客户反应在系统比列调整为150%出现界面显示不正常、笔记偏移、笔记画出屏幕崩溃等问题。更坑人的是,经过测试部测试发现在不同的主机上有不同的现象,后来在我的自己的开发机上运行有问题,但是比较少。因为我现任的直属领导就是当前这个项目的主力之一,他也觉得很诡异,让我更诡异的是他居然帮这个任务交给了我。
好吧,硬着头皮上吧,花了三天时间来熟悉代码和软件,在这个过程中发现有时重启启动之后,会出现不同现象(此时应该想到,是不是有别的程序影响了呢?)。经过自己的思考和调整终于找到了和那个诡异的程序和原因!!!
经过和那个诡异程序的开发者沟通,他们这是一个守护进程,不断和修改显卡的属性,而我们程序大部分获取屏幕的分辨率采用的都是GetSystemMetrics(SM_CXSCREEN)返回,假如当前分辨率为1024*768,系统放大比列为150%,正常GetSystemMetrics(SM_CXSCREEN)获取到的值应该为1024*2/3,而当那个诡异的程序运行时GetSystemMetrics(SM_CXSCREEN)依然是1024,导致整个主程序界面放大、轨迹偏移。当时测试用了如下四种方法获取系统分辨率GetSystemMetrics(SM_CXSCREEN)、GetSystemMetrics(SM_CXFULLSCREEN)、GetDeviceCaps、QueryDisplayConfig四种方法获取系统分辨在,关闭诡异程序时,回去值分别时1024*2/3、1024*2/3、1024*2/3、1024,而打开诡异程序时,返回值分别值1024、1024*2/3、1024、1024。
至于后面解决的方法,就是根据不同方法获取的分辨率的比列来调整咯!!!
关于DPI的参考文档:http://www.cppblog.com/weiym/archive/2014/02/18/205841.aspx
解决MFC应用程序在调整系统比列放大后出错问题心得,布布扣,bubuko.com