为 VS Express 2012 c++ 应用程序设置图标

3

我一直在尝试将一个图标作为资源添加到我的应用程序中,以便在使用C ++的VS 2012 Express中与我的应用程序一起显示。到目前为止,我从其他问题和论坛中学到了以下代码,可以添加到我的RC文件中。

IDI_APP ICON "resources/Icon.ico"

该应用程序的图标会随着 exe 文件出现在桌面上,在程序运行时会显示在任务栏上。然而,在某些情况下,比如在任务管理器中,应用程序的图标不会显示,而是默认的程序图标。我想知道是否有人知道如何更改我的代码,使图标始终与我的程序相关联。我听说问题可能是由于需要不同大小的图标,但是我已经在使用 IcoFX 创建的 ico 文件中拥有许多大小的图标。我还想知道是否需要以编程方式设置图标,以便在任何应用程序关联的地方都能正常使用它。我已经尝试重建并重命名程序以更新外壳中的图标。我正在使用 SFML 窗口,而不是 WinAPI 和 HWND 窗口。

谷歌搜索“重置shell图标缓存”。一个快速的检查是重命名您的程序。 - Hans Passant
我重命名了我的程序,但没有帮助。 - Markovian8261
1个回答

1
  1. 仔细检查您是否创建了一个包含多个分辨率的单个.ico文件,通常为16x16、32x32、48x48和96x96。

  2. 使用以下代码加载您的图标:

    ICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
    
  3. 通过Windows消息通知图标:

    //将两个图标都更改为相同的图标句柄。
    SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon);
    
    //这将确保应用程序图标也被更改。
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, hIcon);
    
  4. 最后,按照这里所述的说明重置shell图标缓存或者重新启动/注销。

其他资源和参考:

https://stackoverflow.com/a/19656000/1938163

https://dev59.com/p0fRa4cB1Zd3GeqP6BR6#2723270


我该如何使用SFML获取HWND? - Markovian8261
每个sf::WindowImpl都应该存储其窗口ID(特定于操作系统):http://en.sfml-dev.org/forums/index.php?topic=110.0 获取它并使用它。 - Marco A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接