Использование значка в диалоговом окне C ++ Win32 API - PullRequest
5 голосов
/ 14 сентября 2011

Я пытаюсь создать диалоговое окно со значком вверху, например так.

icon dialog

Я использую файл ресурсов для загрузки значка вот так.

IDI_ICON1          ICON           ".\\usb.ico"

Я попытался установить значок окна, используя следующий код.

SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)IDI_ICON1);
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)IDI_ICON1);

hwnd - это окно.В результате я получаю синий круг, который выглядит так же, как значок загрузки для Windows 7 и Vista.Я почти уверен, что значок загружается правильно, так как когда я смотрю на панель задач, моя программа имеет этот значок, представляющий мою программу.Если вам нужен код, который я использую для самого диалогового окна, дайте мне знать, что я опубликую его.Я использую Mingw32 C ++ компилятор на Windows 7. Спасибо!

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

Используйте LoadIcon и передайте дескриптор значка в WM_SETICON.

HICON hicon = LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDI_ICONMAIN), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE);
SendMessageW(hwnd, WM_SETICON, ICON_BIG, hicon);
0 голосов
/ 12 октября 2017

Мне пришлось привести приведенное значение LoadImageW() к HICON, чтобы избежать ошибки:

» значение типа "HANDLE" не может быть присвоено объекту типа "HICON" .... "

это сработало для меня:

.... 
//hDlg is the handle to my dialog window
case WM_INITDIALOG:
    {
        HICON hIcon;

        hIcon = (HICON)LoadImageW(GetModuleHandleW(NULL),
            MAKEINTRESOURCEW(IDI_ICON1),
            IMAGE_ICON,
            GetSystemMetrics(SM_CXSMICON),
            GetSystemMetrics(SM_CYSMICON),
            0);
        if (hIcon)
        {
            SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
        }
    }
    break;

и вот результат

win32 Dialog icon

К вашему сведению: использованный значок был загружен с:

http://www.iconsdb.com/orange-icons/stackoverflow-6-icon.html

Надеюсь, это поможет!

...