//好東東,不容錯過!!</p><p>//VC 製作系統托盤程式實現將視窗最小化到系統托盤<br />//前段時間因為要用到系統拖盤,所以研究了一下,在這裡轉載一下,免得以後忘了 ^_^<br />//先在類中定義一個結構變數NOTIFYICONDATA pnid;然後在OnInitDialog進行初始化<br /> pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//該結構體大小<br /> pnid.hWnd=m_hWnd; //視窗控制代碼<br /> pnid.uID=(UINT)m_hIcon; //表徵圖控制代碼<br /> pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; //表徵圖有效|自訂訊息有效|滑鼠指向顯示文字有效<br /> pnid.uCallbackMessage=WM_MYMESSAGE;//自訂的訊息名稱<br /> pnid.hIcon=m_hIcon; //表徵圖控制代碼<br /> strcpy(pnid.szTip,"這是一個測試");//滑鼠指向所顯示的文字<br />//實現最小化到系統拖盤,這定義一個視窗的OnSize事件<br />void CMyDlg::OnSize(UINT nType, int cx, int cy)<br />{<br />CDialog::OnSize(nType, cx, cy);<br />// TODO: 在此處添加訊息處理常式代碼<br />if (nType==SIZE_MINIMIZED)//如果事件為最小化<br /> {<br /> Shell_NotifyIcon(NIM_ADD,&pnid);//在托盤區添加表徵圖<br /> ShowWindow(SW_HIDE);//隱藏主視窗<br /> }<br />}</p><p>//還原功能則先在CMyDlg.h做下列操作:<br />#define WM_MYMESSAGE WM_USER+101 //定義自訂訊息,加的這個值一般都要大於100<br />afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); //在類中定義訊息響應函數</p><p>//然後就在CMyDlg.app中定義訊息映射,函數實現了。</p><p>//在<br />BEGIN_MESSAGE_MAP(CMyDlg, CDialog)<br />END_MESSAGE_MAP()<br />//之間查入訊息映射<br />ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)<br />//然後建立OnMyMessage函數。<br />LRESULT CMyDlg::OnMyMessage(WPARAM wParam, LPARAM lParam){<br /> if( lParam == WM_LBUTTONDOWN )//如果在表徵圖中單擊左鍵則還原<br /> {<br /> Shell_NotifyIcon(NIM_DELETE,&pnid);//刪除托盤表徵圖<br /> ShowWindow(SW_SHOWNORMAL);//顯示主視窗<br /> this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使視窗總是在最前面<br /> }<br /> return 0;<br />}</p><p>//如果要更改顯示表徵圖則先更改pnid結構裡的值,然後使用Shell_NotifyIcon(NIM_MODIFY,&pnid);來更改。