user-interface - Win32 : Displaying a Stock Icon in a Dialog Box under High DPI

标签 user-interface winapi dialog icons dpi

我有一个对话框,我需要在其中显示标准信息图标。这是我的 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 list 将我的应用程序声明为支持 DPI。

最糟糕的是,当我使用自己定制的图标(也来自 RC 文件)时,一切都可以完美缩放。此外,MessageBox使用 MB_ICONINFORMATION 调用的函数flag 也确实显示了图标的缩放版本。

鉴于这些想法,我假设以下几点:
  • SS_ICON 的静态控制style 可以显示缩放版本的图标。
  • 包含标准信息图标的图标资源具有图标的缩放版本 (48x48)。

  • 那我做错了什么?

    最佳答案

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

    或者只是将您的应用声明为 DPI 感知就足够了?您可以通过简单地创建一个文本文件使其成为 list 文件来轻松尝试。
    查看 SetProcessDPIAware 备注部分中的示例API

    关于user-interface - Win32 : Displaying a Stock Icon in a Dialog Box under High DPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565133/

    相关文章:

    java - 我无法按特定顺序将 JButton 添加到 JList

    css - 动态自适应导航栏示例

    Python win32api 发送消息

    android - 显示有关 Activity 来电的对话框

    android - 如何在 Android 中删除对话框的标题

    c++ - retranslateUi() 清除 QLabel 文本

    user-interface - 我可以禁用特定页面上的相关列表悬停链接吗?

    c++ - 在 C 中打印 unicode 字符

    c++ - 如何设置蓝色边框来编辑控件?

    c++ - GetOpenFileName 触发断点