2012-10-05 38 views
1

我有一個使用FreeGlut可視化一些數據的C++編寫的DLL。我想更改主(免費)過剩窗口的圖標。如何更改C++中的freeglut主窗口圖標?

我讀過,這是不可能的,但在我的文檔看:

GLUT_ICON - 指定雲在freeglut窗口的左上角處的圖標。

如果可能,我該如何更改(免費)過剩窗口的圖標?

回答

3

OK,我做到了:

  1. 爲項目創建資源並添加一個32×32的圖標(編輯或進口)。此圖標將獲得等於IDI_ICON1的ID。
  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 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文件。如果你喜歡,你可以ommit資源文件並加載圖標,:

icon = LoadImage(GetModuleHandle(), _T("icon.ico"), IMAGE_ICON, 32, 32, LR_LOADFROMFILE | LR_COLOR); 

您還可以使用LoadIcon功能,但你不能選擇圖標的大小。

手冊: LoadImage SendMessage LoadIcon

編輯:

我認爲這不是最好的解決辦法,所以歡迎您你寫。也許使用GLUT_ICON