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