2011-11-03 58 views
5

我們現有的一個基於Win32 MFC的應用程序出現問題。它在使用高dpi設置的顯示器上無法正確顯示。更具體地說,在選擇120 dpi的Windows XP中,應用程序中有幾個位置可以放大文本,但不是它們的容器(文本溢出其按鈕的邊界等)。如果選擇「96 dpi」並選擇「使用XP樣式dpi縮放」,則也會在Windows 7(和Vista)中出現。如果沒有選擇XP樣式縮放,那麼我理解Win7使用DPI虛擬化。使用DPI虛擬化時,一切看起來都很好(確定事情很模糊,但至少它們是正確的)。默認情況下,在Win7中,120 dpi使用xp樣式縮放,下一個設置(144 dpi)不會。所以我們的應用程序在144 dpi時看起來正確,但在120 dpi時錯誤。Windows應用程序 - DPI問題

如果我編輯的應用程序清單申報程序爲「DPI知道」,那麼這原來DPI虛擬化(但不是XP風格DPI縮放),並且這讓我沒有在那裏。事情仍然看起來非常糟糕(120dpi沒有改變,144dpi現在打破了)。

我需要解決這個問題,我試着讀了新聞部/一般結垢問題,它一直是一個學習的經驗。到目前爲止,我還沒有找到合適的解決方案。目前我目前無意進行徹底和正確的修復(應用程序根據dpi正確縮放所有元素)。這將涉及很多重寫。我認爲實際上有兩種可能的解決方案。一種是關閉任何類型的DPI縮放。這意味着,如果用戶Win7系統設置爲120 dpi,那麼系統上的所有內容都會顯得很好/很大,但我們的應用看起來是正確的,但與其他應用中的所有其他應用相比,它們會很小。第二個解決方案將是如何強制我們的應用程序使用DPI虛擬化,但永遠不會使用XP風格的dpi縮放。我希望這是一個應用程序端更改,而不是依賴最終用戶必須更改Windows配置。

到目前爲止,我還沒有找到一種方法來實現任何一個解決方案。

可有人就這個問題請回復,並指出我在正確的方式更懂行?

謝謝

+1

佈局代碼或繪圖代碼中存在問題嗎?例如,是否按y像素製作按鈕和其他標準控件的問題,還是您有代碼繪製您自己的具有固定大小的控件(例如,使用GDI調用)的問題?你如何做你的佈局?形式?對話框模板?自定義代碼? –

+0

這裏沒有魔法,你只需要讓你的窗戶變大。或者你的字體較小,選擇你的毒藥。 –

回答

2

無法在120 DPI設置上強制進行DPI虛擬化。我已經爲自己的產品進行了調查,因爲擁有高DPI的模糊外觀似乎是一個很好的折衷。

我們最終使得UI定位的全部重寫,並擴展到有它在高DPI設置的字體縮放正確縮放。客戶現在完全瞭解DPI,並在任何DPI設置中正確擴展。

做到這一點的正常工作了一個人〜3個月對我們來說一個相當複雜的客戶端。

我們有一個我們從未嘗試的輔助計劃,但它可能適用於您: 在啓動時,請閱讀操作系統的DPI比例因子。然後縮小這個因子的所有字體實例,這樣當Windows再次縮放字體時,它們又回到了UI可以適應它們的大小。當然,具有高DPI設置的用戶在應用程序中不會獲得更大的字體,但至少可以使用。