我有一个用 C++ 编写的 DLL,它使用 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 文件中,ID 为 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 SendMessage LoadIcon
编辑:
我认为这不是最好的解决方案,所以欢迎你写你的。也许使用GLUT_ICON
?