MFC為應用程式添加托盤(右鍵托盤,快顯功能表)

來源:互聯網
上載者:User

 原始碼:http://download.csdn.net/detail/nuptboyzhb/4137784

1.       匯入一個托盤表徵圖的資源(.ico)格式;資源ID為IDI_ICON1

2.       在架構程式的初始化函數中,初始化一個托盤表徵圖的一個結構體

NOTIFYICONDATA
notifyicondata;//NOTIFYICONDATA結構

    
notifyicondata.cbSize = sizeof(NOTIFYICONDATA);//為notifyicondata結構體分配空間

     //為notifyicondata結構體各個參數賦值

    
notifyicondata.hWnd = m_hWnd;//視窗的控制代碼

    
notifyicondata.uID = IDI_NOTIFYICON; //ID標識

    
notifyicondata.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;

    
notifyicondata.uCallbackMessage = WM_ADDTRAYICON;//回調訊息的標識;我們要為回調訊息的標識添加使用者訊息映射

    
notifyicondata.hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);//載入托盤表徵圖

 
wcscpy(notifyicondata.szTip,
_T("為程式建立托盤表徵圖"));

     Shell_NotifyIcon(NIM_ADD, &notifyicondata);       //裝載托盤表徵圖

     注意:在該步驟中有幾個注意的變數:

a.       m_hWnd是整個應用程式視窗的控制代碼

b.       IDI_NOTIFYICON是我們自己定義的一個常量;即在標頭檔上添加如下代碼:

#define IDI_NOTIFYICON 100       //托盤表徵圖標識

c.       WM_ADDTRAYICON是我們自訂訊息的標識,也是一個常量;

#define WM_ADDTRAYICON  WM_USER+101//自訂訊息

3.       添加使用者訊息映射和訊息處理函數

1.       新增成員函數:

afx_msg LRESULT OnAddTrayIcon(WPARAM wParam,LPARAM lParam);

2.       添加訊息映射

ON_MESSAGE(WM_ADDTRAYICON, OnAddTrayIcon)//添加訊息映射

注意:第一個參數是使用者自訂訊息的標識;第二個參數是訊息響應處理函數

3.       實現訊息響應處理函數OnAddTrayIcon

LRESULT 類名::OnAddTrayIcon(WPARAM wParam,LPARAM lParam)

{

   if (wParam == IDI_NOTIFYICON)//為建立的托盤表徵圖

   {

            switch(lParam)//訊息的類型

            {

           
case WM_LBUTTONDBLCLK://雙擊左鍵

      //實習視窗的隱藏或顯示

//AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);//隱藏視窗

                    
break;

           
case WM_RBUTTONDBLCLK://雙擊右鍵

                     {

                               AfxGetApp()->m_pMainWnd->DestroyWindow();//關閉視窗

                              
break;

                     }

          
case WM_RBUTTONDOWN://右擊托盤,顯示菜單

           {

             
CMenu menu,*pSubMenu; //後面要用的CMenu對象

             
CPoint point;

             
menu.LoadMenu(IDR_POPUP_MENU); //裝載自訂的右鍵菜單 

             
pSubMenu = menu.GetSubMenu(0); //擷取第一個快顯功能表

              GetCursorPos(&point); //擷取當前游標位置        pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

              
break;

           }

            }

   }

  
return 1;

}

4.       卸載托盤。

當應用程式退出時,卸載

   NOTIFYICONDATA
notifyicondata;

  
notifyicondata.cbSize = sizeof(NOTIFYICONDATA);

  
notifyicondata.uFlags = 0;

  
notifyicondata.hWnd = m_hWnd;

notifyicondata.uID
= IDI_NOTIFYICON;

Shell_NotifyIcon(NIM_DELETE, &notifyicondata);//卸載托盤表徵圖

 

 

NOTIFYICONDATA結構體的uCallbackMessage變數,使得使用者訊息響應與托盤的點擊等訊息關聯在一起;托盤的標識IDI_NOTIFYICON,恰好是使用者訊息響應用來判斷是否是托盤傳遞的訊息的依據;

 

 

在基於多文檔或單文檔的應用程式,當使用者點擊最小化按鈕時,我們可以講介面隱藏;

具體是,添加OnSize()訊息

void CMainFrame::OnSize(UINT nType, int cx, int cy)

{

  
CFrameWnd::OnSize(nType,

cx,
cy);

  
if(nType == SIZE_MINIMIZED)

   {

     
ShowWindow(SW_HIDE); // 當最小化時,隱藏主視窗

   }

   // TODO: 在此處添加訊息處理常式代碼

}

 對話方塊的最小化托盤於此很類似,可以參考:http://justtotry.blog.163.com/blog/static/446308122011622101427208/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.