加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

user-interface – Win32:在高DPI下的对话框中显示股票图标

发布时间:2020-12-14 02:16:11 所属栏目:Windows 来源:网络整理
导读:我有一个对话框,我需要显示标准信息图标.这是我的RC代码: ICON "",IDC_ICON_INFORMATION,18,70,21,20 我按如下方式处理WM_INITDIALOG消息: HICON aIcn = LoadIcon(NULL,IDI_INFORMATION);SendDlgItemMessage(m_hWnd,STM_SETICON,(WPARAM) aIcn,0); 在96 DP
我有一个对话框,我需要显示标准信息图标.这是我的RC代码:

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

我按如下方式处理WM_INITDIALOG消息:

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

在96 DPI下一切都很好:静态控件显示一个32×32像素的图标.

但是,当我切换到更高DPI时(通过右键单击桌面,选择屏幕分辨率,然后单击Make或其他更大或更小的项目),图标不会缩放!由于其他所有内容都可以很好地扩展,因此图标看起来比相邻文本小得多.我预计在144 DPI(150%)上,图标尺寸将为48×48像素.我确实通过XML清单将我的应用程序声明为DPI感知.

最糟糕的是,当我使用我自己的定制图标(也来自RC文件)时,一切都完美无缺.此外,使用MB_ICONINFORMATION标志调用的MessageBox函数也会显示图标的缩放版本.

鉴于这些想法,我假设如下:

>具有SS_ICON样式的静态控件可以显示图标的缩放版本.
>包含标准信息图标的图标资源具有图标的缩放版本(48×48).

那我做错了什么?

解决方法

使用 LoadImage()而不是LoadIcon(),并使用从GetSystemMetrics(SM_CYICON)和GetSystemMetrics(SM_CXICON)获取的值指定cxDesired和cyDesired参数.

或者也许只是声明你的应用程序DPI意识就足够了?您可以通过简单地创建文本文件来轻松尝试,使其成为清单文件.
请参阅SetProcessDPIAware API的备注部分中的示例

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读