VC中使程序最小化到系統托盤區
//定義托盤圖標結構體
NOTIFYICONDATA nid;
#define WM_ICONNOTIFY WM_USER + 909 //圖標響應消息(lParam)
#define ID_TASKBARICON 100 //參數(wParam)
//初始化系統托盤圖標
void CMainFrame::OnBtnMinimize()
{
//初始化系統托盤圖標
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;;
nid.uID = ID_TASKBARICON; //發出的消息中的wParam參數
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //點擊托盤圖標系統發出的消息(即發出的消息中的lParam參數)
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_HIS_COMM));
strcpy(nid.szTip, "歷史數據採集軟件 1.0.3");
Shell_NotifyIcon(NIM_ADD, &nid); //加入圖標
ShowWindow(SW_HIDE); //隱藏窗體
}
//手工添加消息處理函數
afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(WM_ICONNOTIFY,CMainFrame::OnNotifyIcon)
//雙擊系統托盤,使程序正常化
LRESULT CMainFrame::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
POINT rpoint;
CMenu tmenu;
GetCursorPos(&rpoint);
//如果在托盤圖標上雙擊左鍵
if ( ( wParam == ID_TASKBARICON ) && ( lParam == WM_LBUTTONDBLCLK ) )
{
ShowWindow(SW_SHOW); //顯示窗體
Shell_NotifyIcon(NIM_DELETE, &nid); //刪除系統托盤圖標
}
//如果在托盤圖標上雙擊右鍵
if ( ( wParam == ID_TASKBARICON ) && ( lParam == WM_RBUTTONDOWN ) )
{
tmenu.LoadMenu(IDR_MAINFRAME); //加載系統主菜單
SetForegroundWindow(); //將程序置於桌面頂部
tmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y, this); //在點擊圖標處彈出系統菜單的第一項
}
return 0;
}