【问题标题】:WinAPI - LoadIcon returns a valid handle but Icon won't changeWinAPI - LoadIcon 返回一个有效的句柄,但图标不会改变
【发布时间】:2021-12-29 14:51:46
【问题描述】:

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

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

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

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

【问题讨论】:

  • 谷歌“重置外壳图标缓存”。

标签: c visual-studio-2010 winapi


【解决方案1】:

如果我打开我的可执行文件所在的 Visual Studio 文件夹,它仍然有来自微软的默认图标

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

您显示的代码更改了与您的窗口类相关联的图标,从而更改了您的主窗口。这将出现在您的窗口、任务栏等的左上角...在您的程序运行时。

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

根据您的附加说明

如果我将我的可执行文件移动到任何其他文件夹,它将变为我设置的图标

您似乎已成功更改图标,而它在构建目录中显示错误的唯一原因是旧的 Windows 资源管理器图标缓存。

有关如何强制更新缓存的说明,请参阅 SuperUser Q&A Refresh Icon Cache Without Rebooting

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多