2013-04-01 3 views
0

Я использую minGW и затмение. И я сделал 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 в к еху?

+0

Файл с ресурсами, вероятно, будет проще всего. – chris

+0

Да, я ввожу эту строку в мой .rc-файл: 1 ICON «icon.ico», но это не то же самое, что HICON, и если я использую HICON «icon.ico» ничего не происходит –

+0

Вы храните * значок * в исполняемый как ресурс, используя директиву «ICON» в вашем сценарии ресурсов, а затем используйте «LoadImage» для загрузки значка и получения им «HICON». –

ответ

3

Используйте файл .rc, чтобы добавить файл .ico к ресурсам вашего исполняемого файла. Затем при вызове LoadImage() избавиться от флага LR_LOADFROMFILE и указать идентификатор вашего ресурса в параметре lpszName вместо имени файла. Например:

MY_ICON ICON "icon.ico" 

.

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

Спасибо за идею, она работает :-) –

+1

Не забудьте использовать 'TEXT (« MY_ICON »)', чтобы он работал при компиляции для Unicode. Также убедитесь, что вы используете правильный HINSTANCE. GetModuleHandle будет работать нормально, если все в одном исполняемом файле, но если код загрузки находится в DLL, а значок находится в ресурсах EXE (или наоборот), вам нужно будет выбрать HINSTANCE более тщательно. –

Смежные вопросы