代码之家  ›  专栏  ›  技术社区  ›  Kerido

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

  •  5
  • Kerido  · 技术社区  · 14 年前

    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);
    

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

    最糟糕的是,当我使用自己定制的图标(也来自RC文件)时,一切都可以完美地伸缩。而且 MessageBox 函数调用 MB_ICONINFORMATION 标志也会显示图标的缩放版本。

    考虑到这些想法,我假设如下:

    1. 静态控制 SS_ICON 样式可以显示图标的缩放版本。
    2. 包含标准信息图标的图标资源具有图标的缩放版本(48x48)。

    那我做错什么了?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Stefan    14 年前

    使用 LoadImage

    或者仅仅将你的应用程序声明为DPI感知就足够了?通过简单地创建一个文本文件使其成为清单文件,您可以很容易地尝试。 有关 SetProcessDPIAware 美国石油学会