winapi — Как изменить значок главного окна freeglut в C ++?

У меня есть DLL, написанная на C ++, которая использует FreeGlut для визуализации некоторых данных. Я хочу изменить значок главного (свободного) окна перенасыщения.

Я читал, что это невозможно, но в документах я вижу:

GLUT_ICON — указывает значок, который идет в верхнем левом углу окон freeglut.

Как я могу изменить значок для (свободного) окна перенасыщения, если это возможно?

1

Решение

ОК, я сделал это:

  1. Создайте ресурс для проекта и добавьте значок 32×32 (отредактируйте его или импортируйте). Этот значок получит идентификатор, равный IDI_ICON1,
  2. Включите файл «resource.h».
  3. Создайте окно перенасыщения следующим образом:

    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 ?

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]