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

时间:2014-06-10 00:47:41

标签: c++ visual-studio-2012 resources icons sfml

我一直试图将一个图标作为资源添加到我的应用程序中,以便使用c ++在VS 2012 Express中使用我的应用程序显示它。到目前为止,我已经选择了以下代码从其他问题和论坛添加到我的rc文件中。

IDI_APP ICON "resources/Icon.ico"

图标显示在带有exe的桌面上,并在程序运行时显示在任务栏上。但是在某些情况下,例如在任务管理器上,应用程序的图标不会显示,而是显示默认程序图标。我想知道是否有人知道如何更改我的代码,以便图标始终与我的程序相关联。我听说问题可能是由于需要不同尺寸的图标而导致的,但我在使用程序IcoFX创建的ico文件中有很多尺寸的图标。我还想知道我是否需要以编程方式设置图标,以便它可以在与应用程序关联的任何位置工作。我已经尝试重建和重命名我的程序来更新shell中的图标。我正在使用sfml窗口而不是winapi和HWND窗口。

1 个答案:

答案 0 :(得分:1)

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

  2. 使用类似

    的图标加载图标
    ICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
    
  3. 通过图标

    的Windows消息通知
    //Change both icons to the same icon handle.
    SendMessage(hwnd, WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon);
    
    //This will ensure that the application icon gets changed too.
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_SMALL, hIcon);
    SendMessage(GetWindow(hwnd, GW_OWNER), WM_SETICON, ICON_BIG, hIcon);
    
  4. 最后重置shell图标缓存as described here或重新启动/注销。

  5. 其他资源和参考资料:

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

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