在vc中將程序圖標最小化到托盤中

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); //刪除系統托盤圖標 

}

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