//.h文件 void toTray();//最小化到托盤 void DeleteTray();//刪除托盤圖標 afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//圖標恢復//.cpp文件#define WM_SHOWTASK (WM_USER +1) #define IDR_SHOW 11 #define IDR_OTHER 12 #define IDR_EXIT 13
BEGIN_MESSAGE_MAP() ... ON_MESSAGE(WM_SHOWTASK,OnShowTask)//消息映射 END_MESSAGE_MAP()
?
void ScheduleDlg::toTray()//最小化到托盤 {NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_SHOWTASK;//自定義的消息名稱 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip,"OA");//信息提示條為“OA” Shell_NotifyIcon(NIM_ADD,&nid);//在托盤區添加圖標 ShowWindow(SW_HIDE);//隱藏主窗口 }LRESULT ScheduleDlg::OnShowTask(WPARAM wParam, LPARAM lParam) {//wParam接收的是圖標的ID,而lParam接收的是鼠標的行為 if(wParam != IDR_MAINFRAME) return 1;switch (lParam){case WM_LBUTTONUP://左鍵單擊顯示主界面 {this->ShowWindow(SW_SHOW);SetForegroundWindow();DeleteTray();}break;case WM_RBUTTONUP://右擊彈出菜單 {LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint);//得到鼠標位置 CMenu menu;menu.CreatePopupMenu();menu.AppendMenu(MFT_STRING, IDR_SHOW, "打開主界面");menu.AppendMenu(MFT_STRING, IDR_OTHER, "其他");menu.AppendMenu(MFT_STRING, IDR_EXIT, "退出");SetForegroundWindow();EnableMenuItem(menu,IDR_OTHER,MF_GRAYED);//"其他"菜單變灰//menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x,lpoint->y,this);//顯示菜單int xx=TrackPopupMenu(menu,TPM_RETURNCMD,lpoint->x,lpoint->y,NULL,this->m_hWnd,NULL);//顯示菜單并獲取選項IDif(xx==IDR_SHOW) {this->ShowWindow(SW_SHOW);SetForegroundWindow();DeleteTray();}else if(xx==IDR_OTHER) {MessageBox("你點擊了“其他”菜單","提示",MB_OK);}else if(xx==IDR_EXIT) {OnBnClickedCancel();}HMENU hmenu = menu.Detach();menu.DestroyMenu();delete lpoint;}break;case WM_LBUTTONDBLCLK:{//雙擊不處理}break;}return 0; }void ScheduleDlg::DeleteTray()//銷毀托盤圖標 {NOTIFYICONDATA nid;nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);nid.hWnd = this->m_hWnd;nid.uID = IDR_MAINFRAME;nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;nid.uCallbackMessage = WM_SHOWTASK;nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));strcpy(nid.szTip,"OA");Shell_NotifyIcon(NIM_DELETE, &nid); }
?