前面幾節雞啄米講了屬性頁對話框,我們可以根據所講内容方便的建立自己的屬性頁對話框。本節講解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。按位取或就可以了。

VS2010/MFC編程入門之十六(對話框:消息對話框)

       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.  
  5.     INT_PTR nRes;   
  6.   
  7.     // 顯示消息對話框   
  8.     nRes = MessageBox(_T("您确定要進行加法計算嗎?"), _T("加法計算器"), MB_OKCANCEL | MB_ICONQUESTION);   
  9.     // 判斷消息對話框返回值。如果為IDCANCEL就return,否則繼續向下執行   
  10.     if (IDCANCEL == nRes)   
  11.         return;   
  12.   
  13.     // 将各控件中的數據保存到相應的變量   
  14.     UpdateData(TRUE);   
  15.   
  16.     // 将被加數和加數的加和賦值給m_editSum   
  17.     m_editSum = m_editSummand + m_editAddend;   
  18.   
  19.     // 根據各變量的值更新相應的控件。和的編輯框會顯示m_editSum的值   
  20.     UpdateData(FALSE);   
  21.     // 設置屬性對話框為向導對話框   
  22.     //sheet.SetWizardMode();   
  23. }  

        編譯運行,在運行結果對話框上點“計算”按鈕彈出以下消息對話框:

VS2010/MFC編程入門之十六(對話框:消息對話框)

       大家也可以将MessageBox函數換為AfxMessageBox()函數,同時參數進行相應修改,運行下看看效果。

       消息對話框就講到這裡了。在以後的軟件開發中用到它的頻率很高,希望大家慢慢熟悉并掌握它。有問題歡迎回雞啄米博客交流或加入我們的編程入門群。

除非特别注明,雞啄米文章均為原創
轉載請标明本文地址:http://dnsf85p.top/software/171.html
2012年5月5日
作者:雞啄米 分類:軟件開發 浏覽: 評論:26