解決MFC應用程序在調整系統比列放大後出錯問題心得

公司有一個屏幕書寫的軟件,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

發佈了41 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章