AfxMessageBox

AfxMessageBox

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 );

返回值


返回值有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,它是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.AfxMessageBox是模態對話框,你不進行確認時程序不往下運行,它會阻塞你當前的線程,除非你程序是多線程的程序,否則只有等待模態對話框被確認。
3、如果用MFC的話,請盡量使用afxmessagebox,因為這個全局的對話框最安全,也最方便。
但是在WIN32 SDK的情況下只能使用MESSAGEBOX。