如何在C ++中更改freeglut主窗口图标?

时间:2012-10-05 14:09:24

标签: c++ winapi icons glut freeglut

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

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

  

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

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

1 个答案:

答案 0 :(得分:3)

好的,我做到了:

  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.. 
    
  4. 现在获取图标 - 它位于您的DLL文件中,IDI_ICON1为id,因此我们使用:

        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. 
        //...
    

    现在将此消息发送到Window。

        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