VC中使程序最小化到系統托盤區

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;
}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章