У меня есть DLL, написанная на C ++, которая использует FreeGlut для визуализации некоторых данных. Я хочу изменить значок главного (свободного) окна перенасыщения.
Я читал, что это невозможно, но в документах я вижу:
GLUT_ICON — указывает значок, который идет в верхнем левом углу окон freeglut.
Как я могу изменить значок для (свободного) окна перенасыщения, если это возможно?
ОК, я сделал это:
IDI_ICON1
,Создайте окно перенасыщения следующим образом:
glutCreateWindow("VIZ");
HWND hwnd = FindWindow(NULL, _T("VIZ") ); //probably you can get the window handler in different way..
Теперь получите значок — он находится в вашем DLL-файле с идентификатором IDI_ICON1, поэтому мы используем:
HANDLE icon = LoadImage(GetModuleHandle(_T("NAME_OF_YOUR_DLL")), MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_COLOR );
//You can also prepare second, smaller (16x16) icon - it looks better in title bar.
//...
Теперь отправьте это сообщение в окно.
SendMessage(hwnd, (UINT)WM_SETICON, ICON_BIG, (LPARAM)icon);
Это оно! Вероятно, некоторая очистка была бы хорошей.
Это решение не требует развертывания .ico-файла. Если вы предпочитаете, вы можете пропустить файл ресурсов и загрузить значок с:
icon = LoadImage(GetModuleHandle(), _T("icon.ico"), IMAGE_ICON, 32, 32, LR_LOADFROMFILE | LR_COLOR);
Вы также можете использовать LoadIcon функция, но тогда вы не можете выбрать размер значка.
Руководства:
LoadImage
Отправить сообщение
LoadIcon
Редактировать:
Я думаю, что это не лучшее решение, поэтому вы можете написать свое. Может быть, используя GLUT_ICON
?
Других решений пока нет …