1.在**.h中定義消息名字,添加消息函數定義
#define WM_ICONNOTIFY WM_USER + 500 //圖標響應消息(lParam)
afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);
2.在**.cpp添加消息映射
ON_MESSAGE(WM_ICONNOTIFY,CtestDlgDlg::OnNotifyIcon)
3.編寫最小化到托盤的函數
void CtestDlgDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
NOTIFYICONDATA nid;
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = IDD_TESTDLG_DIALOG;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //自定義的消息名稱
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
// IDR_MAINFRAME 是在托盤顯示的圖標
strcpy(nid.szTip,"程序名稱"); //信息提示條爲“計劃任務提醒”
Shell_NotifyIcon(NIM_ADD, &nid); //在托盤區添加圖標
ShowWindow(SW_HIDE); //隱藏主窗口
}
4.編寫托盤的消息響應函數
LRESULT CtestDlgDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
POINT point;
CMenu menu;
GetCursorPos(&point);
//如果在托盤圖標上雙擊左鍵
if ((wParam == IDD_TESTDLG_DIALOG) && (lParam == WM_LBUTTONDBLCLK))
{
ShowWindow(SW_SHOW); //顯示窗體
}
//如果在托盤圖標上單擊右鍵
if ((wParam == IDD_TESTDLG_DIALOG) && (lParam == WM_RBUTTONDOWN))
{
menu.LoadMenu(IDR_MENU1); //加載系統主菜單
SetForegroundWindow(); //將程序置於桌面頂部
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this); //在點擊圖標處彈出系統菜單的第一項 /
}
return 0;
}
5.編寫刪除托盤圖標的函數
void CtestDlgDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: 在此處添加消息處理程序代碼
NOTIFYICONDATA nc;
nc.cbSize = sizeof(NOTIFYICONDATA);
nc.hWnd = m_hWnd;
nc.uID = IDD_TESTDLG_DIALOG;
Shell_NotifyIcon(NIM_DELETE, &nc); //刪除系統托盤圖標
}