WinAPI - LoadIcon returns 一个有效的句柄,但图标不会改变

WinAPI - LoadIcon returns a valid handle but Icon won't change

我正在从资源文件中加载我的图标,如下所示:

wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wcex.hIconSm        = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));

我还从资源和文件夹中删除了 visual studio 默认 ico,因此它只有我提供的 .icos 和 .bmps。 LoadIcon 工作正常,但如果我打开我的可执行文件所在的 visual studio 文件夹,它仍然具有来自 Microsoft 的默认图标,而不是我加载的图标。

如果我将我的可执行文件移动到任何其他文件夹,它将更改为我设置的图标,这是为什么?为什么我删了VS还是用默认图标?

if I open the visual studio folder where my executable is, it still has the default icon from microsoft

其他程序(例如 Windows 资源管理器)显示的图标与您显示的代码无关 -- 您的程序甚至 运行。

您显示的代码更改了与您的 window class 关联的图标,因此更改了您的主要 window。这将出现在您的 window、任务栏等的左上角……而您的程序是 运行.

查看 EXE 文件时显示的图标仅基于数字顺序中的第一个图标资源(资源编辑器允许您分配的符号名称对哪个图标是“第一个”没有影响)。

根据您的补充说明

If I move my executable to any other folder it will change to the icon I set

看来您已成功更改图标,它在构建目录中显示错误的唯一原因是陈旧的 Windows Explorer 图标缓存。

有关如何强制更新缓存的说明,请参阅超级用户问答 Refresh Icon Cache Without Rebooting