2010-08-25 65 views
4

我有一個對話框,我需要顯示標準信息圖標。這裏是我的RC代碼:Win32:在高DPI下的對話框中顯示股票圖標

ICON "",IDC_ICON_INFORMATION,18,70,21,20 

我處理WM_INITDIALOG消息如下:

HICON aIcn = LoadIcon(NULL, IDI_INFORMATION); 
SendDlgItemMessage(m_hWnd, IDC_ICON_INFORMATION, STM_SETICON, (WPARAM) aIcn, 0); 

一切正常,在96 DPI大:靜態控件顯示一個32×32像素的圖標。

然而,當我(在桌面通過單擊鼠標右鍵,選擇屏幕分辨率,並單擊製作或其他物品或大或小)切換到高DPI的圖標不結垢!由於其他一切都很好地縮放,圖標看起來在視覺上比相鄰文本小得多。我預計144 DPI(150%)的圖標尺寸將爲48x48像素。我確實通過XML清單將我的應用程序聲明爲DPI。

最令人頭疼的是,當我使用我自己定製的圖標(也來自RC文件)時,一切都完美地縮放。此外,使用MB_ICONINFORMATION標誌調用的MessageBox函數也會顯示圖標的縮放版本。

鑑於這些想法,我認爲以下幾點:

  1. SS_ICON風格的靜態控件可以顯示縮放圖標版本。
  2. 包含標準信息圖標的圖標資源具有縮放版本的圖標(48x48)。

我做錯了什麼呢?

+0

貌似'LoadIconWithScaleDown'功能(在Vista及更高版本),可以做的工作的註釋部分的例子。任何其他想法? – Kerido 2010-08-25 11:24:04

回答

0

使用LoadImage()代替LoadIcon(),並使用從GetSystemMetrics(SM_CYICON)和GetSystemMetrics(SM_CXICON)獲取的值指定cxDesired和cyDesired參數。

或者,也許只是宣佈你的應用程序爲DPI意識可能夠了?您可以通過簡單地創建一個使其成爲清單文件的文本文件輕鬆嘗試。 見的SetProcessDPIAware API

+0

嘗試了所有這些。該程序已通過清單識別DPI。這是寫在原來的問題。 – Kerido 2010-08-25 17:57:11