Ker*_*ido 5 user-interface winapi icons dialog dpi
我有一个对话框,我需要显示标准信息图标.这是我的RC代码:
ICON "",IDC_ICON_INFORMATION,18,70,21,20
Run Code Online (Sandbox Code Playgroud)
我按如下方式处理WM_INITDIALOG消息:
HICON aIcn = LoadIcon(NULL, IDI_INFORMATION);
SendDlgItemMessage(m_hWnd, IDC_ICON_INFORMATION, STM_SETICON, (WPARAM) aIcn, 0);
Run Code Online (Sandbox Code Playgroud)
在96 DPI下一切都很好:静态控件显示一个32x32像素的图标.
但是,当我切换到更高DPI时(通过右键单击桌面,选择屏幕分辨率,然后单击Make或其他更大或更小的项目),图标不会缩放!由于其他所有内容都很好地缩放,因此图标看起来比相邻文本小得多.我预计在144 DPI(150%)上,图标尺寸将为48x48像素.我确实通过XML清单将我的应用程序声明为DPI感知.
最糟糕的是,当我使用我自己的定制图标(也来自RC文件)时,一切都完美无缺.此外,MessageBox使用MB_ICONINFORMATION标志调用的函数也会显示图标的缩放版本.
鉴于这些想法,我假设如下:
SS_ICON样式的静态控件可以显示图标的缩放版本.那我做错了什么?
使用LoadImage () 而不是 LoadIcon(),并使用从 GetSystemMetrics(SM_CYICON) 和 GetSystemMetrics(SM_CXICON) 获取的值指定 cxDesired 和 cyDesired 参数。
或者也许只是将您的应用程序声明为 DPI 感知就足够了?您可以通过简单地创建一个文本文件使其成为清单文件来轻松尝试。请参阅SetProcessDPIAware API备注部分中的示例
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |