2013-04-01 38 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。 –