AfxMessageBox()和MessageBox()

一 函數原型及參數
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
 hWnd:對話框父窗口句柄,對話框顯示在Delphi窗體內,可使用窗體的Handle屬性,否則可用0,使其直接作爲桌面窗口的子窗口。
 Text:欲顯示的信息字符串。
 Caption:對話框標題字符串。
 Type:對話框類型常量。
 該函數的返回值爲整數,用於對話框按鈕的識別。
 2、類型常量
 對話框的類型常量可由按鈕組合、缺省按鈕、顯示圖標、運行模式四種常量組合而成。
 (1)按鈕組合常量
 MB_OK = $00000000;         //一個確定按鈕
 MB_OKCANCEL = $00000001;      //一個確定按鈕,一個取消按鈕
 MB_ABORTRETRYIGNORE = $00000002;  //一個異常終止按鈕,一個重試按鈕,一個忽略按鈕
 MB_YESNOCANCEL = $00000003;     //一個是按鈕,一個否按鈕,一個取消按鈕
 MB_YESNO = $00000004;        //一個是按鈕,一個否按鈕
 MB_RETRYCANCEL = $00000005;     //一個重試按鈕,一個取消按鈕
 (2)缺省按鈕常量
 MB_DEFBUTTON1 = $00000000;     //第一個按鈕爲缺省按鈕
 MB_DEFBUTTON2 = $00000100;     //第二個按鈕爲缺省按鈕
 MB_DEFBUTTON3 = $00000200;     //第三個按鈕爲缺省按鈕
 MB_DEFBUTTON4 = $00000300;     //第四個按鈕爲缺省按鈕
 (3)圖標常量
 MB_ICONHAND = $00000010;        //“×”號圖標
 MB_ICONQUESTION = $00000020;      //“?”號圖標
 MB_ICONEXCLAMATION = $00000030;    //“!”號圖標
 MB_ICONASTERISK = $00000040;      //“i”圖標
 MB_USERICON = $00000080;        //用戶圖標
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”號圖標
 MB_ICONERROR = MB_ICONHAND;      //“×”號圖標
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”圖標
 MB_ICONSTOP = MB_ICONHAND;       //“×”號圖標
 (4)運行模式常量
 MB_APPLMODAL = $00000000;    //應用程序模式,在未結束對話框前也能切換到另一應用程序
 MB_SYSTEMMODAL = $00001000;   //系統模式,必須結束對話框後,才能做其他操作
 MB_TASKMODAL = $00002000;    //任務模式,在未結束對話框前也能切換到另一應用程序
 MB_HELP = $00004000;       //Help Button
 3、函數返回值
 0            //對話框建立失敗
 IDOK = 1        //按確定按鈕
 IDCANCEL = 2      //按取消按鈕
 IDABOUT = 3       //按異常終止按鈕
 IDRETRY = 4       //按重試按鈕
 IDIGNORE = 5      //按忽略按鈕
 IDYES = 6        //按是按鈕
 IDNO = 7        //按否按鈕 
二 用法

1. MessageBox("這是一個最簡單的消息框!");
2. MessageBox("這是一個有標題的消息框!","標題"); 
3. MessageBox("這是一個確定 取消的消息框!","標題", MB_OKCANCEL ); 
4. MessageBox("這是一個警告的消息框!","標題", MB_ICONEXCLAMATION ); 
5. MessageBox("這是一個兩種屬性的消息框!","標題", 
MB_ICONEXCLAMATION|MB_OKCANCEL );
6. if(MessageBox("一種常用的應用","標題
" ,MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)
return;
注意:
以上消息框的用法是在CWnd的子類中的應用,如果不是,則要MessageBox(NULL,"ddd","ddd",MB_OK); 或MessageBox(hWnd,"ddd","ddd",MB_OK); hWnd爲某窗口的句柄,或者直接用AfxMessageBox。

二、在MessageBox中顯示變量的值

CString string;

string.format("%d%s",m_age, m_address); //將變量組裝到字符串中

MessageBox(string,"消息框標題",消息框類型);
 
 

AfxMessageBox的函數原型 

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

  int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) –1 );
  在第一種形式中,lpszText表示在消息框內部顯示的文本,消息框的標題爲應用程序的可執行文件名(如Hello)。在第二種形式中,nIDPrompt爲要顯示的文本字符串在字符串表中的ID。函數調用時會自動從字符串表中載入字符串並顯示在消息框中。nType爲消息框中顯示的按鈕風格和圖標風格的組合,可以採用|(或)操作符組合各種風格。
  按鈕風格
  MB_ABORTRETRYIGNORE 消息框中顯示Abort、Retry、Ignore按鈕
  MB_OK 顯示OK按鈕
  MB_OKCANCEL 顯示OK、Cancel按鈕
  MB_RETRYCANCEL 顯示Retry、Cancel按鈕
  MB_YESNO 顯示Yes、No按鈕
  MB_YESNOCANCEL 示Yes、No、Cancel按鈕
  圖標風格
  MB_ICONINFORMATION 顯示一個i圖標,表示提示
  MB_ICONEXCLAMATION 顯示一個驚歎號,表示警告
  MB_ICONSTOP 顯示手形圖標,表示警告或嚴重錯誤
  MB_ICONQUESTION 顯示問號圖標,表示疑問
  使用時,可以只調用AfxMessageBox(LPCTSTR lpszText);這樣默認風格爲AfxMessageBox(LPCTSTR lpszText,MB_OK|MB_ICONEXCLAMATION );

AfxMessageBox的返回值

  返回值有8種,如果內存不夠,則返回0,否則返回以下值中的一種,分別對應相應的按鈕被點擊:
  IDABORT、IDCANCEL、IDIGNORE、IDNO、IDOK 、IDRETRY、IDYES。
  MSDN原文:
  Zero if there is not enough memory to display the message box; otherwise one of the following values is returned:
  IDABORT The Abort button was selected.
  IDCANCEL The Cancel button was selected.
  IDIGNORE The Ignore button was selected.
  IDNO The No button was selected.
  IDOK The OK button was selected.
  IDRETRY The Retry button was selected.
  IDYES The Yes button was selected.
  If a message box has a Cancel button, the IDCANCEL value will be returned if either the ESC key is pressed or the Cancel button is selected. If the message box has no Cancel button, pressing the ESC key has no effect.

AfxMessageBox()與MessageBox()的區別

  與AfxMessageBox類似的函數MessageBox,它是CWnd的類成員函數:
  int MessageBox( LPCTSTR lpszText,LPCTSTR lpszCaption = NULL,UINT nType = MB_OK );
  兩個函數的區別:AfxMessageBox比MessageBox簡單一些,因爲它是一個全局函數所以不需要對應的一個窗口類,但是不能控制消息框標題,常用於調試程序時的內部數據輸出或警告;MessageBox比較正式,常用在要提交的應用程序版本中,可以控制標題內容而不必採用含義不明的可執行文件名爲標題。
  舉例:
  AfxMessageBox("Are you sure?",MB_YESNO|MB_ICONQUESTION);
  int a = MessageBox(TEXT("是否確認刪除?"),TEXT("Warning!!"),4);
  if(a==6)
  AfxMessageBox("Yes");
  else
  AfxMessageBox("No");
  (其中#define IDYES 6 #define IDNO 7)
  主要區別:
  1.MessageBox 如果在非CWnd類中使用則是API函數,使用起來非常不便,必須指定標題和樣式
  否則使用CWnd類的函數,只需一個內容參數就可以了,AfxMessageBox和CWnd類成員函數類似,使用起來很方便,因爲是Afx 基於框架的函數
  2.MessageBox是模態對話框,你不進行確認時程序不往下運行,它會阻塞你當前的線程爲,除非你程序是多線程的程序,否則只有等待模態對話框被確認
  3、如果用MFC的話,請儘量使用afxmessagebox,因爲這個全局的對話框最安全,也最方便。

  但是在WIN32 SDK的情況下只能使用MESSAGEBOX。

 

 

AfxMessageBox()和MessageBox用法

AfxMessageBox是MFC庫提供的,提供了多種重載形式,AfxMessageBox是mfc的全局函數.

MessageBox是標準的windows   Api.

AfxMessageBox()函數在任何類裏邊都可以使用,而MessageBox()函數只能在CWnd類的繼承類中使用。

AfxMessageBox()函數的參數沒有MessageBox()函數的參數豐富,所以後者較前者靈活。

AfxMessageBox()不能控制消息框標題,常用於調試程序時的內部數據輸出或警告;

MessageBox()比較正式,常用在要提交的應用程序版本中,可以控制標題內容而不必採用含義不明的可執行文件名爲標題。

 

發佈了7 篇原創文章 · 獲贊 23 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章