我有一个对话框,需要显示标准的信息图标。以下是我的RC代码:
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的情况下,所有功能都能正常运行:静态控件显示32x32像素的图标。
然而,当我切换到更高的DPI时(通过右键单击“桌面”,选择“屏幕分辨率”,并点击“使其他项目变大或变小”),图标不会缩放!由于其他所有内容都可以很好地缩放,因此图标在视觉上比相邻文本小得多。我希望在144 DPI(150%)下,图标尺寸将为48x48像素。我已经通过XML清单将我的应用程序声明为DPI感知。
最可恶的是,当我使用自己制作的自定义图标(也来自RC文件)时,一切都可以完美缩放。此外,使用带有MB_ICONINFORMATION标志的MessageBox函数确实显示了缩放后的图标版本。
鉴于这些想法,我认为以下做法是正确的:
1.带有SS_ICON样式的静态控件可以显示缩放版本的图标。 2.包含标准信息图标的图标资源具有缩放版本的图标(48x48)。
那么我做错了什么?
LoadIconWithScaleDown
函数(在 Vista 及以上版本中可用)可以完成这个任务。还有其他想法吗? - Kerido