<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    MFC為應用程序添加托盤(右鍵托盤,彈出菜單)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    源代碼: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/

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全