You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向LoadIcon()传递MAINICON加载程序主图标是否为定义性行为?

关于用MAINICON加载主图标的行为说明
  • 结论先行:这不是Windows官方定义的标准行为,只是工具链(比如Visual Studio资源编辑器)的隐性约定,属于“碰巧可行”的情况。
  • 为什么能生效:像Visual Studio这类主流开发工具,在你设置程序的主图标时,会自动将该图标的资源名称设为MAINICON(对应的数值ID通常是128,但字符串标识就是这个)。不少第三方资源编辑工具也跟风遵循了这个约定,所以代码能正常加载图标,但微软从未在MSDN中将MAINICON列为LoadIcon的合法参数。
  • 潜在风险:如果更换资源编译工具、手动修改资源脚本(.rc)里的图标名称,或者用其他方式打包资源,这个名称就可能失效,导致加载失败。
  • 更可靠的替代方案:
    • 直接查看项目的资源脚本(.rc文件),找到主图标的实际ID(比如IDI_MYMAINICON),用这个标准ID调用LoadIcon。
    • 使用ExtractIconEx提取可执行文件的第一个图标(也就是资源管理器显示的主图标),示例代码:
      HICON hMainIcon = NULL;
      // 提取当前程序的主图标
      TCHAR szExePath[MAX_PATH] = {0};
      GetModuleFileName(NULL, szExePath, MAX_PATH);
      ExtractIconEx(szExePath, 0, NULL, &hMainIcon, 1);
      
    • 也可以用LoadImage函数,指定资源类型为IMAGE_ICON,并通过资源ID或路径加载。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:27:05