在全局頭文件里面定義:
cpp代碼
- #define WM_NOTIFYICON (WM_APP+100)
1:初始化
cpp代碼
-
- NOTIFYICONDATA tnd;
- tnd.cbSize=sizeof(NOTIFYICONDATA);
- tnd.hWnd=this->m_hWnd;
- tnd.uID=IDR_MAINFRAME;
- tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
- tnd.uCallbackMessage=WM_NOTIFYICON;
- tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
- strcpy(tnd.szTip,"我的程序...");
- Shell_NotifyIcon(NIM_ADD,&tnd);
2.當explorer退出重啟時重新顯示托盤區(qū)圖標,如果不處理則不會顯示
重載回調函數(shù)DefWindowProc:
cpp代碼
- LRESULT CMyDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
-
- static UINT s_uTaskbarRestart;
- if (message == WM_CREATE)
- s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
- if(message == s_uTaskbarRestart)
- {
- NOTIFYICONDATA tnd;
- tnd.cbSize=sizeof(NOTIFYICONDATA);
- tnd.hWnd=this->m_hWnd;
- tnd.uID=IDR_MAINFRAME;
- tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
- tnd.uCallbackMessage=WM_NOTIFYICON;
- tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),
- MAKEINTRESOURCE(IDR_MAINFRAME));
- strcpy(tnd.szTip,"我的程序...");
- Shell_NotifyIcon(NIM_ADD,&tnd);
- }
- return CDialog::DefWindowProc(message, wParam, lParam);
- }
3.程序退出時托盤區(qū)圖標處理,如果不處理,則托盤區(qū)仍然有該無意義的圖標
cpp代碼
- NOTIFYICONDATA tnid;
- tnid.cbSize=sizeof(NOTIFYICONDATA);
- tnid.hWnd=this->m_hWnd;
- tnid.uID=IDR_MAINFRAME;
- Shell_NotifyIcon(NIM_DELETE,&tnid);
4.在托盤區(qū)圖標上添加菜單
可以添加一個下拉式菜單:
cpp代碼
-
- afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM lParam);
-
-
- ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)
-
-
- void CMyDlg::OnNotifyIcon(WPARAM wParam,LPARAM lParam)
- {
- UINT uID=(UINT)wParam;
- UINT uMouseMsg=(UINT)lParam;
- if(uID==IDR_MAINFRAME)
- {
- CMenu menu;
- CMenu *pPopup;
- CPoint pt;
- switch(uMouseMsg)
- {
- case WM_RBUTTONDOWN:
- menu.LoadMenu(IDR_TrayMenu);
- pPopup=menu.GetSubMenu(0);
- GetCursorPos(&pt);
- pPopup->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);
- break;
- case WM_LBUTTONDOWN:
- ShowWindow(SW_SHOWDEFAULT);
-
-
-
-
-
-
- break;
- }
- }
- }
實現(xiàn)菜單后,又可以對菜單的鼠標點擊做出其他的動作,在此不在贅述。