我一直试图将一个图标作为资源添加到我的应用程序中,以便使用c ++在VS 2012 Express中使用我的应用程序显示它。到目前为止,我已经选择了以下代码从其他问题和论坛添加到我的rc文件中。
IDI_APP ICON "resources/Icon.ico"
图标显示在带有exe的桌面上,并在程序运行时显示在任务栏上。但是在某些情况下,例如在任务管理器上,应用程序的图标不会显示,而是显示默认程序图标。我想知道是否有人知道如何更改我的代码,以便图标始终与我的程序相关联。我听说问题可能是由于需要不同尺寸的图标而导致的,但我在使用程序IcoFX创建的ico文件中有很多尺寸的图标。我还想知道我是否需要以编程方式设置图标,以便它可以在与应用程序关联的任何位置工作。我已经尝试重建和重命名我的程序来更新shell中的图标。我正在使用sfml窗口而不是winapi和HWND窗口。
答案 0 :(得分:1)
仔细检查您是否创建了具有多种分辨率的单个.ico文件,通常为16x16,32x32,48x48,96x96。
使用类似
的图标加载图标ICON hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
通过图标
的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);
最后重置shell图标缓存as described here或重新启动/注销。
其他资源和参考资料: