2013-04-01 110 views
0

我使用minGW和eclipse。 我做这样的HICON:winapi C++ 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文件?

+0

资源文件可能是最简单的。 – chris

+0

是的,我在我的.rc文件中输入这一行:1 ICON“icon.ico”,但这与HICON不一样,如果我使用HICON“icon.ico”,则不会发生任何反应 –

+0

您将*图标*可通过在资源脚本中使用'ICON'指令将其作为资源执行,然后使用'LoadImage'加载图标并获取'HICON'。 –

回答

3

使用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); 
... 
} 
+0

谢谢你的想法,它的工作原理:-) –

+1

记住在编译Unicode时使用'TEXT(“MY_ICON”)'使其工作。还要确保你使用正确的HINSTANCE。如果所有内容都在同一个可执行文件中,GetModuleHandle将正常工作,但如果加载代码位于DLL中并且图标位于EXE资源中(反之亦然),则必须更仔细地选择HINSTANCE。 –