-
MessageBox
鎖定
- 中文名
- 模態對話框
- 外文名
- MessageBox
- 函數名
- MessageBox
- 作 用
- 彈出模式對話框
- 所屬頭文件
- Windows.h和afxwin.h
- 編程語言
- C/C++,VB
MessageBox函數
MessageBox函數原型
//我們一般理解為: int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType); //其實它是根據Unicode定義的 WINUSERAPI int WINAPI MessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); WINUSERAPI int WINAPI MessageBoxW( HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); #ifdef UNICODE #define MessageBox MessageBoxW//如果啓用Unicode庫,就用MessageBoxW #else #define MessageBox MessageBoxA//否則,就用MessageBoxA #endif
MessageBox參數
hWnd:
此參數代表消息框擁有的窗口。如果為NULL,則消息框沒有擁有窗口。
lpText:
消息框的內容。如果使用了Unicode庫,則把文本變成:
TEXT(/*sometext*/)
lpCaption:
消息框的標題。如果使用了Unicode庫,則把文本變成:
TEXT(/*sometext*/)
uType:
指定一個決定對話框的內容和行為的位標誌集。此參數可以為下列標誌組中標誌的組合。指定下列標誌中的一個來顯示消息框中的按鈕以及圖標。
MessageBoxuType參數
按鈕:
按鈕參數 | 含義 |
MB_OK | 默認值。有一個確認按鈕在裏面。 |
MB_YESNO | 有是和否在裏面。 |
MB_ABORTRETRYIGNORE | 有Abort(放棄),Retry(重試)和Ignore(跳過) |
MB_YESNOCANCEL | 消息框含有三個按鈕:Yes,No和Cancel |
MB_RETRYCANCEL | 有Retry(重試)和Cancel(取消) |
MB_OKCANCEL | 消息框含有兩個按鈕:OK和Cancel |
附:
//按鈕 #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L //圖標 #define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L #define MB_USERICON 0x00000080L //圖標聲明 #define MB_ICONWARNINGMB_ICONEXCLAMATION #define MB_ICONERRORMB_ICONHAND #define MB_ICONINFORMATIONMB_ICONASTERISK #define MB_ICONSTOPMB_ICONHAND //默認按鈕聲明 #define MB_DEFBUTTON1 0x00000000L #define MB_DEFBUTTON2 0x00000100L #define MB_DEFBUTTON3 0x00000200L #if(WINVER>=0x0400) #define MB_DEFBUTTON4 0x00000300L//如果支持第四個MessageBox按鈕的話,定義DEFButton4 #endif //對話框模型定義 #define MB_APPLMODAL 0x00000000L #define MB_SYSTEMMODAL 0x00001000L #define MB_TASKMODAL 0x00002000L #define MB_HELP 0x00004000L//是否擁有幫助按鈕 //特殊聲明 #define MB_NOFOCUS 0x00008000L #define MB_SETFOREGROUND 0x00010000L #define MB_DEFAULT_DESKTOP_ONLY 0x00020000L #define MB_TOPMOST 0x00040000L #define MB_RIGHT 0x00080000L #define MB_RTLREADING 0x00100000L
圖標:
參數 | 含義 |
MB_ICONEXCLAMATION | 一個驚歎號出現在消息框 |
MB_ICONWARNING | 一個驚歎號出現在消息框 |
MB_ICONINFORMATION | 一個圓圈中小寫字母i組成的圖標出現在消息框 |
MB_ICONASTERISK | 一個圓圈中小寫字母i組成的圖標出現在消息框 |
MB_ICONQUESTION | 一個問題標記圖標出現在消息框 |
MB_ICONSTOP | 一個停止消息圖標出現在消息框 |
MB_ICONERROR | 一個停止消息圖標出現在消息框 |
MB_ICONHAND | 一個停止消息圖標出現在消息框 |
形態:
參數 | 含義 |
MB_APPLMODAL | |
MB_SYSTEMMODAL | |
MB_TASKMODAL | 如果參數hwnd為NULL的話,那麼除了所有屬於當前線程高層次的窗口失效外,MB_TASKMODALL和MB_APPLMODAL一樣。當調用應用程序或庫沒有一個可以得到的窗口句柄時,使用此標誌。但仍需要阻止輸入到調用線程的其他窗口,而不是擱置其他線程。 |
其他:
標誌 | 含義 |
MB_DEFAULT_DESKTOP_ONLY | 接收輸入的當前桌面一定是一個缺省桌面。否則,函數調用失敗。缺省桌面是一個在用户已經紀錄且以後應用程序在此上面運行的桌面。 |
MB_HELP | 把一個Help按鈕增加到消息框。選擇Help按鈕或按F1產生一個Help事件。 |
MB_RIGHT | 文本為右調整 |
MB_RTLREADING | 用在Hebrew和Arabic系統中從右到左的順序顯示消息和大寫文本。 |
MB_SETFOREGROUND | 消息框變為前景窗口。在內部系統為消息個調用SetForegroundWindow函數。 |
MB_TOPMOST | 消息框用WS_EX_TOPMOST窗口類型來創建MB_SERVICE_NOTIFICATION。 |
MessageBox返回值
ID | 選擇了…… |
IDOK(1) | OK |
IDCANCEL(2) | CANCEL |
IDABORT(3) | ABORT |
IDRETRY(4) | RETRY |
IDIGNORE(5) | IGNORE |
IDYES(6) | YES |
IDNO(7) | NO |
MessageBox顯示系統圖標
通過將 uType 參數設置為相應的標誌值,可以在消息框中系統圖標,具體圖標可參見MSDN網站。
圖標 | 標誌位值 |
- | MB_ICONHAND, MB_ICONSTOP, 或者MB_ICONERROR |
- | MB_ICONQUESTION |
- | MB_ICONEXCLAMATION 或者 MB_ICONWARNING |
- | MB_ICONASTERISK 或者 MB_ICONINFORMATION |
添加兩個從右到左標記 (RLMs),Unicode 格式字符中用 U+200F表示。在消息框顯示字符串的開頭被由 MessageBox 渲染引擎解釋,以致造成 MessageBox 的閲讀順序,呈現為從右向左 (RTL) 。
如果在一個對話框存在時創建一個消息框,則使用對話框的句柄作為hWnd 參數。hWnd參數不應指定為一個子窗口,就像對話框中的控件一樣。
MessageBox實例
#include<windows.h> //切記!當調用<windows.h>時,不要調用MFC!(Afx.h) int main() { // C++11 新增了nullptr,可以代替NULL int result = MessageBox( nullptr , TEXT("這是對話框") , TEXT("你好") , MB_ICONINFORMATION|MB_YESNO); switch(result)/*注意!使用Unicode應用TEXT包圍字串*/ { case IDYES:MessageBox(NULL,TEXT("您選擇了YES"),TEXT("YES"),MB_OK);break; case IDNO:MessageBox(NULL,TEXT("您選擇了NO"),TEXT("NO"),MB_OK);break; } return 0; }
第一步:彈出對話框。語句:
int result = MessageBox(NULL,TEXT("這是對話框"),TEXT("你好"),MB_ICONINFORMATION|MB_YESNO);
選擇是:語句:
case IDYES:MessageBox(NULL,TEXT("您選擇了YES"),TEXT("YES"),MB_OK);break;
選擇否:語句:
case IDNO:MessageBox(NULL,TEXT("您選擇了NO"),TEXT("NO"),MB_OK);break;
MessageBoxMFC特例
假如您創建了一個MFC工程,如果工程文檔中有MainFrm.cpp的話,那麼,本函數就被封裝成了:
int MessageBox(LPCTSTR lpszText,LPCTSTR lpszCaption=NULL,UINT nType = MB_OK);
MessageBox參數
lpszText:指向一個字符串包含要顯示的消息。
lpszCaption:指向一個字符串包含標題。
nType:指定消息框的內容和行為。
MessageBox返回值
指定函數的結果。
下面的例子可以讓我們對比兩種函數的用法,兩行代碼的功能都是顯示一個消息框,內容為“示例用法”
::MessageBox(NULL, "示例用法", "demo", MB_OK);
MessageBox("示例用法");//採用了一些C++的語法特性使用消息框用起來更順手
MessageBoxVB方法
函數原型:
MessageBox.Show(Text,Title,MessageBoxButtons,MessageBoxIcon,MessageBoxDefaultButtons)
參數説明:
(1)Text:必選項,消息框的正文。
(2)Title:可選項,消息框的標題。
(3)MessageBoxButtons:可選項,消息框的按鈕設置,默認只顯示【確定】按鈕。
OK――確定 OKCancel――確定和取消 AbortRetryIgnore――終止、重試和忽略
YesNoCancel――是、否和取消 YesNo――是和否 RetryCancel――重試和取消
(4)MessageBoxIcon:對話框中顯示的圖標樣式,默認不顯示任何圖標。
Question――問號 Information、Asterisk――i號 Error、Stop、Hand――錯誤號
Warning、Exclamation――!號 None――不顯示任何圖標
(5)MessageBoxDefaultButtons:可選項,對話框中默認選中的按鈕設置。
DefaultButton1――第1個button是默認按鈕
DefaultButton2――第2個button是默認按鈕
DefaultButton3――第3個button是默認按鈕
備註:函數原型中藍色字體部分的參數,可以通過點來獲取其後面跟隨的參數值。