1

我有一个用 C++ 编写的 DLL,它使用 FreeGlut 来可视化一些数据。我想更改主(免费)过剩窗口的图标。

我读过这是不可能的,但在我看到的文档中:

GLUT_ICON - 指定出现在 freeglut 窗口左上角的图标。

如果可能,如何更改(免费)过剩窗口的图标?

4

1 回答 1

4

好的,我做到了:

  1. 为项目创建一个资源并添加一个 32x32 图标(编辑或导入)。此图标将获得等于 的 ID 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 文件中,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

于 2012-10-06T01:00:48.570 回答