托盤圖標的刪除和托盤程序的優化

上一篇討論了托盤圖標的添加,程序退出後雖然系統會自動刪除托盤圖標,但這種工作最好在程序中完成,以保證程序所有的動作都在我們的代碼控制之內

3.刪除托盤圖標

    NOTIFYICONDATA nid;
    
    nid.cbSize = sizeof nid;
    nid.hWnd = GetSafeHwnd();
    nid.uID = IDR_MAINFRAME;
    nid.uFlags = NIF_MESSAGE | NIF_ICON;
    Shell_NotifyIcon(NIM_DELETE,&nid);

這些代碼與前一篇內容是相關的,理論上講只要nid.hWnd、nid.uID與添加托盤圖標時這兩個成員變量的數值對應相等,刪除圖標就能成功

但事實上,由於我們刪除圖標時,程序正在退出,往往窗口已經銷燬,不管是用GetSafeHwnd還是直接引用m_hWnd都得不到我們添加圖標時所用的nid.hWnd的值了,所以上面的代碼放在析構函數中最後調用總是失敗的。

所以最佳的辦法,還是將

NOTIFYICONDATA nid;
這個變量改寫成成員變量
NOTIFYICONDATA m_nid;
這樣要換圖標或者刪除圖標,都很方便,不用重新定義臨時的NOTIFYICON重新賦值。
照這種操作,在刪除時,可以直接寫這一句就行了:
Shell_NotifyIcon(NIM_DELETE,&m_nid);
發佈了69 篇原創文章 · 獲贊 53 · 訪問量 100萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章