我有一个对话框,我需要显示标准信息图标。这是我的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文件)时,一切都完美无缺。此外,使用MessageBox
标志调用的MB_ICONINFORMATION
函数也会显示图标的缩放版本。
考虑到这些想法,我假设以下内容:
SS_ICON
样式的静态控件可以显示图标的缩放版本。那我做错了什么?
答案 0 :(得分:0)
使用LoadImage()而不是LoadIcon(),并使用从GetSystemMetrics(SM_CYICON)和GetSystemMetrics(SM_CXICON)获取的值指定cxDesired和cyDesired参数。
或者只是声明你的应用程序可以识别DPI就足够了?您可以通过简单地创建文本文件轻松尝试,使其成为清单文件。 请参阅SetProcessDPIAware API
的备注部分中的示例