1. 程式人生 > >VS2013/MFC程式設計入門之十五(對話方塊:訊息對話方塊)

VS2013/MFC程式設計入門之十五(對話方塊:訊息對話方塊)

       本節講解Windows系統中最常用最簡單的一類對話方塊--訊息對話方塊。

       我們在使用Windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以MFC提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是CWnd類的成員函式MessageBox()和全域性函式AfxMessageBox()。

       一.CWnd::MessageBox()函式和AfxMessageBox()函式的用法

       下面就分別講解兩個函式的用法。

       1.CWnd::MessageBox()函式

       CWnd::MessageBox()的函式原型如下:

       int MessageBox(
           LPCTSTR lpszText,
           LPCTSTR lpszCaption = NULL,
           UINT nType = MB_OK 
       );

       引數說明:

       lpszText:需要顯示的訊息字串。

       lpszCaption:訊息對話方塊的標題字串。預設值為NULL。取值為NULL時使用預設標題。

       nType:訊息對話方塊的風格和屬性。預設為MB_OK風格,即只有“確定”按鈕。

       nType的取值可以是下面兩個表中任取一個值,也可以是各取一個值的任意組合。即可以指定一個對話方塊型別,也可以指定一個對話方塊圖示,還可以兩者都設定。

nType 取值 引數說明
MB_ABORTRETRY 有“終止”、“重試”和“忽略”按鈕
MB_OK 有“確定”按鈕
MB_OKCANCEL 有“確定”和“取消”按鈕
MB_RETRYCANCEL 有“重試”和“取消”按鈕
MB_YESNO 有“是”和“否”按鈕
MB_YESNOCANCEL 有“是”、“否”和“取消”按鈕


對話方塊型別表

nType 取值 顯示圖示
MB_ICONEXCLAMTION
MB_ICONWARNING

VS2010/MFC程式設計入門之十六(對話方塊:訊息對話方塊)

MB_ICONASTERISK
MB_ICONINFORMATION

VS2010/MFC程式設計入門之十六(對話方塊:訊息對話方塊)

MB_ICONQUESTION

VS2010/MFC程式設計入門之十六(對話方塊:訊息對話方塊)

MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR

VS2010/MFC程式設計入門之十六(對話方塊:訊息對話方塊)

 對話方塊圖標表

       如果想要設定nType的值為型別和圖示的組合,可以像這樣取值:MB_OKCANCEL | MB_ICONQUESTION。按位取或就可以了。

       2.AfxMessageBox()函式

       AfxMessageBox()的函式原型為:

       int AfxMessageBox(
           LPCTSTR lpszText,
           UINT nType = MB_OK,
           UINT nIDHelp = 0 
       );

       引數說明:

       lpszText:同CWnd::MessageBox()函式

       nType:CWnd::MessageBox()函式

       nIDHelp:此訊息的幫助的上下文ID。預設值為0,取0時表示要使用應用程式的預設幫助上下文。

       二.CWnd::MessageBox()和AfxMessageBox()的返回值

我們在呼叫了上面兩個函式後,都可以彈出模態訊息對話方塊。訊息對話方塊關閉後,我們也都可以得到它們的返回值。兩者的返回值就是使用者在訊息對話方塊上單擊的按鈕的ID,可以是以下值:

      IDABORT:單擊“終止”按鈕。
      IDCANCEL:單擊“取消”按鈕。
      IDIGNORE:單擊“忽略”按鈕。
      IDNO:單擊“否”按鈕。
      IDOK:單擊“確定”按鈕。
      IDRETRY:單擊“重試”按鈕。
      IDYES:單擊“是”按鈕。

      三.應用舉例

我們還是拿前面加法計算器的程式做例子。

       大家是否記得,在模態對話方塊及其彈出過程中我們修改了CAdditionDlg::OnBnClickedAddButton()函式,在點了“計算”按鈕以後先彈出了一個模態對話方塊,詢問使用者是否確定要進行加法計算,並通過模態對話方塊DoModal函式的返回值判斷使用者選擇了“確定”還是“取消”。這些功能很明顯訊息對話方塊完全能夠實現,本文接下來就使用訊息對話方塊來替代原來的模態對話方塊。

       在非模態對話方塊的建立及顯示中,我們註釋了模態對話方塊的相關程式碼,加入了非模態對話方塊的建立和顯示程式碼,我們在加入訊息對話方塊之前將非模態對話方塊的程式碼也註釋或刪除掉,確保此函式中不再生成原來的模態對話方塊或非模態對話方塊。

       修改後的CAdditionDlg::OnBnClickedAddButton()函式如下:

C++程式碼
  1. void CAdditionDlg::OnBnClickedAddButton()   
  2. {   
  3. // TODO: Add your control notification handler code here 
  4. INT_PTR nRes;   
  5. // 顯示訊息對話方塊 
  6.     nRes = MessageBox(_T("您確定要進行加法計算嗎?"), _T("加法計算器"), MB_OKCANCEL | MB_ICONQUESTION);   
  7. // 判斷訊息對話方塊返回值。如果為IDCANCEL就return,否則繼續向下執行 
  8. if (IDCANCEL == nRes)   
  9. return;   
  10.     else
  11.     {
    1. // 將各控制元件中的資料儲存到相應的變數 
    2.     UpdateData(TRUE);   
    3. // 將被加數和加數的加和賦值給m_editSum 
    4.     m_editSum = m_editSummand + m_editAddend;   
    5. // 根據各變數的值更新相應的控制元件。和的編輯框會顯示m_editSum的值 
    6.     UpdateData(FALSE);   
  12.     }
  13. // 設定屬性對話方塊為嚮導對話方塊 
  14. //sheet.SetWizardMode(); 
  15. }  

        編譯執行,在執行結果對話方塊上點“計算”按鈕彈出以下訊息對話方塊:


       大家也可以將MessageBox函式換為AfxMessageBox()函式,同時引數進行相應修改,執行下看看效果。

       作為以後軟體開放過程中最常用的對話方塊,訊息對話方塊就講到這裡了。希望大家慢慢熟悉並掌握它。有問題歡迎回部落格交流。