【问题标题】:winapi c++ HICONwinapi c++ HICON
【发布时间】:2013-03-22 21:29:46
【问题描述】:

我使用 minGW 和 eclipse。 我用这种方式制作了 HICON:

case WM_CREATE:
{
...
hIcon = (HICON)LoadImage(NULL, "icon.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
if(hIcon) { SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon); }
else { MessageBoxW(hwnd, "ico not found", "ico not found", MB_OK | MB_ICONERROR); }
...
}

因此,.ico 必须与 .exe 位于同一文件夹中 如何将此 .ico 构建到 exe 中?

【问题讨论】:

  • 资源文件可能是最简单的。
  • 是的,我在我的 .rc 文件中输入了这一行:1 ICON "icon.ico" 但这与 HICON 不同,如果我使用 HICON "icon.ico" 则没有任何反应跨度>
  • 通过在资源脚本中使用'ICON'指令将icon作为资源存储在可执行文件中,然后使用LoadImage加载图标并获取HICON 给它。

标签: c++ winapi icons


【解决方案1】:

使用 .rc 文件将 .ico 文件添加到可执行文件的资源中。然后在调用LoadImage() 时,去掉LR_LOADFROMFILE 标志并在lpszName 参数中指定资源的ID 而不是文件名。例如:

MY_ICON ICON "icon.ico"

.

case WM_CREATE:
{
...
hIcon = (HICON) LoadImage(GetModuleHandle(NULL), "MY_ICON", IMAGE_ICON, 32, 32, 0);
...
}

【讨论】:

  • 记得使用TEXT("MY_ICON") 使它在为 Unicode 编译时工作。还要确保您使用的是正确的 HINSTANCE。如果所有内容都在同一个可执行文件中,GetModuleHandle 将正常工作,但如果加载代码在 DLL 中并且图标在 EXE 的资源中(反之亦然),则必须更仔细地选择 HINSTANCE。
【解决方案2】:

你可以使用资源文件。

请参阅此处了解更多信息: http://msdn.microsoft.com/en-us/library/zabda143(v=vs.71).aspx

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2014-01-31
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2014-06-11
    相关资源
    最近更新 更多