2014-02-23 17 views
1

所以我有沒有一個控制檯程序。它通過製作一個虛擬的HWND來啓動它,然後將其隱藏起來,然後作爲通知區域應用程序(保留在托盤中)。人們可以將鼠標懸停在程序上查看其狀態並按熱鍵在屏幕上執行任務。不能設置在Visual C正確的托盤圖標++使用LoadIcon()

無論如何,我想在托盤中顯示我的程序圖標,但不能。我將圖標資源添加到Visual Studio,並且我的可執行文件在資源管理器中有一個圖標。該資源的大小從16x16 - 256x256。

現在,我將NOTIFYICONDATA的信息設置爲: nid.hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_ICON1));

並列入「RESOURCE.H」

其中IDI_ICON1然而,當我用這個定義爲104藍色說明點圖標顯示出來(即Windows默認者之一)。我試過IDI_ERROR,錯誤圖標顯示正常。我試過一個自定義的12x12圖標,因爲我讀的大小可能是問題,但那也沒有效果。

IDI_APPLICATION使用應用程序的默認圖標,即默認的.exe圖標。

我目前不知道該做什麼或做什麼。

在此先感謝您的幫助!

+1

*不要*當你使用原始WINAPI跳過錯誤檢查。至少使用assert()來驗證你的假設。您現在將看到LoadIcon()失敗。 –

+0

是的你是對的。我不熟悉這個任務欄相關的API的大部分,所以我提交了一些檢查。 – Mohammad

回答

4

的MSDN文章LoadIcon()說,這大約第一個參數:

一個手柄,其可執行文件的模塊的實例包含要加載的圖標。加載標準圖標時,此參數必須爲NULL。

由於您沒有加載標準圖標,而是您自己的,所以您需要提供有效的模塊句柄。爲您的可執行模塊句柄可以用傳球NULLGetModuleHandle()功能進行檢索,所以代碼應該是這樣的:

nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)); 
+0

是的你是對的。所以我做了錯誤的假設,NULL將是一個NULL句柄,我需要使用GetModuleHandle(NULL)。謝謝! – Mohammad