MFC對話方塊最小化到托盤

來源:互聯網
上載者:User

1、在資源中的Icon中匯入一個自己喜歡的表徵圖,ID命名為IDR_MAINFRAME,將先前的IDR_MAINFRAME的表徵圖刪除掉;

2、在自己的Dialog標頭檔中定義一個變數  NOTIFYICONDATA m_nid,關於該結構體的具體資訊可以查閱MSDN;

3、添加訊息響應函數OnInitDialog(),並在該函數中添加以下代碼,這樣程式一啟動,就在托盤中顯示出了自己應用程式的表徵圖。

    //---------------------------托盤顯示---------------------------------//

    m_nid.cbSize  = (DWORD)sizeof(NOTIFYICONDATA);

    m_nid.hWnd    = this->m_hWnd;

    m_nid.uID     = IDR_MAINFRAME;

    m_nid.uFlags  = NIF_ICON | NIF_MESSAGE | NIF_TIP ;

    m_nid.uCallbackMessage = WM_SHOWTASK;             // 自訂的訊息名稱

    m_nid.hIcon   = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

    strcpy(m_nid.szTip, "伺服器程式");                // 資訊提示條為"伺服器程式",VS2008 UNICODE編碼用wcscpy_s()函數

    Shell_NotifyIcon(NIM_ADD, &m_nid);                // 在托盤區添加表徵圖

    這時候編譯,會報WM_SHOWTASK的錯,因為該訊息要自己定義。

4、在Dialog標頭檔中聲明訊息函數原型                                         

    LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);

5、在Dialog源檔案中進行訊息映射

    ON_MESSAGE(WM_SHOWTASK,OnShowTask)

6、在Dialog源檔案中添加自訂的訊息響應代碼,左鍵雙擊彈出應用程式主視窗,按右鍵快顯功能表。

    LRESULT CServerDlg::OnShowTask(WPARAM wParam, LPARAM lParam)

    {

           if(wParam != IDR_MAINFRAME)

                  return 1;

           switch(lParam)

           {

           case WM_RBUTTONUP:                                        // 右鍵起來時快顯功能表

                  {

                    

                         LPPOINT lpoint = new tagPOINT;

                         ::GetCursorPos(lpoint);                    // 得到滑鼠位置

                         CMenu menu;

                         menu.CreatePopupMenu();                    // 聲明一個彈出式菜單

                         menu.AppendMenu(MF_STRING, WM_DESTROY, "關閉");

                         menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);

                         HMENU hmenu = menu.Detach();

                         menu.DestroyMenu();

                         delete lpoint;

                  }

                  break;

           case WM_LBUTTONDBLCLK:                                 // 雙擊左鍵的處理

                  {

                         this->ShowWindow(SW_SHOWNORMAL);         // 顯示主視窗

                  }

                  break;

           }

           return 0;

    }

7、添加OnSize訊息響應函數,處理最小化時的操作。

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

    {

           CDialog::OnSize(nType, cx, cy);

           // TODO: Add your message handler code here

           if(nType == SIZE_MINIMIZED)  

           {  

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

           }  

    }

8、添加關閉視窗時的訊息響應函數,將托盤中的應用程式圖示刪除

    BOOL CServerDlg::DestroyWindow()

    {

           // TODO: Add your specialized code here and/or call the base class

           // 在托盤區刪除表徵圖

           Shell_NotifyIcon(NIM_DELETE, &m_nid);             

           return CDialog::DestroyWindow();

    }

    經過以上的步驟,就編寫出了一個簡單的可以最小化到托盤的程式。該程式在一啟動時,在托盤創立應用程式的表徵圖,最小化程式時隱藏主視窗,雙擊托盤區的表徵圖時,顯示主視窗,右鍵點擊托盤區視窗時,快顯功能表進行相應的操作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.