【问题标题】:How can I display the IDI_INFORMATION icon at 16 x 16 in the lower left of my dialog?如何在对话框的左下角以 16 x 16 显示 IDI_INFORMATION 图标?
【发布时间】:2022-01-11 23:04:51
【问题描述】:

当您使用CTaskDialog 时,您可以设置页脚图标,即 16 x 16。我想在我自己的对话框中做类似的事情:

目前我自己的对话框底部有一个静态资源。


我知道我可以像这样加载信息图标:

HICON hInfo = LoadStandardIcon(IDI_INFORMATION);
  1. 我们如何将其加载为 16 x 16?
  2. 我们如何在对话框的左侧显示它?

【问题讨论】:

    标签: visual-c++ mfc dialog icons


    【解决方案1】:

    如果您(希望)不需要支持 Windows XP,可以使用LoadIconWithScaleDown

    例如:

    HICON hicon;
    HRESULT hr = LoadIconWithScaleDown(NULL, (PCWSTR)IDI_INFORMATION,
                 GetSystemMetrics(SM_CXICON) / 2, GetSystemMetrics(SM_CYICON) / 2,  &hicon);
    ...
    

    这为您提供了加载现代版本图标而不是旧的丑陋图标的额外好处。另见this SO article。

    【讨论】:

    • @AndrewTruckle 就像使用 LoadStandardIcon 一样使用它。只需yourstaticcontrol.SetIcon(hicon)。
    • @AndrewTruckle 是的,实际上是 GetSystemMetrics(SM_CXICON) / 2 用于 16x16 图标。
    • GetSystemMetrics 返回逻辑像素。它不支持 DPI,实际上也不支持(如果您有两个具有不同 DPI 设置的显示器,它应该返回哪个值?)。如果您的应用程序被标记为(每个监视器)DPI 感知,则您必须通过调用结果计算的因子手动缩放这些大小,例如GetDpiForWindow.
    • @AndrewTruckle 我认为你应该问一个新问题,提供更多细节。
    【解决方案2】:

    您可以使用Picture Control 来做到这一点,并随时定位它。作为代码,你可以这样做:

    CStatic  myicon;
    myicon.Attach(GetDlgItem(ID_STATIC_ICON));
    myicon.SetIcon(static_cast<HICON>(::LoadImage(nullptr, MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0)));
    

    我没有测试代码,但应该可以工作。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多