MessageBox

MessageBox

MessageBox指的是顯示一個模態對話框,其中包含一個系統圖示、 一組按鈕和一個簡短的特定於應用程式訊息,如狀態或錯誤的信息。訊息框中返回一個整數值,該值指示用戶單擊了哪個按鈕。

基本介紹

  • 中文名:模態對話框
  • 外文名:MessageBox
  • 函式名:MessageBox
  • 作用:彈出模式對話框
  • 所屬頭檔案:Windows.h和afxwin.h
  • 程式語言:C/C++,VB
函式,函式原型,參數,uType參數,返回值,備註,實例,MFC特例,參數,返回值,VB方法,

函式

函式原型

//我們一般理解為: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

參數

hWnd:
此參數代表訊息框擁有的視窗。如果為NULL,則訊息框沒有擁有視窗。
lpText:
訊息框的內容。如果使用了Unicode庫,則把文本變成:
TEXT(/*sometext*/)
lpCaption:
訊息框的標題。如果使用了Unicode庫,則把文本變成:
TEXT(/*sometext*/)
uType:
指定一個決定對話框的內容和行為的位標誌集。此參數可以為下列標誌組中標誌的組合。指定下列標誌中的一個來顯示訊息框中的按鈕以及圖示。

uType參數

按鈕:
按鈕參數
含義
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
在hwnd參數標識的視窗中繼續工作以前,用戶一定回響訊息框。但是,用戶可以移動到其他執行緒的視窗且在這些視窗中工作。根據應用程式中視窗的層次機構,用戶則以移動到執行緒內的其他視窗。所有母訊息框的子視窗自動地失效,但是彈出視窗不是這樣。如果既沒有指定MB_SYSTEMMODAL也沒有指定MB_TASKMOOAL,則MB_APPLMODAL為預設的。
MB_SYSTEMMODAL
除了訊息框有WB_EX_TOPMOST類型,MB_APPLMODAL和MB_SYSTEMMODAL一樣。用系統模態訊息框來改變各種各樣的用戶,主要的損壞錯誤需要立即注意(例如,記憶體溢出)。如果不是那些與hwnd聯繫的視窗,此標誌對用戶對視窗的相互聯繫沒有影響。
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。

返回值

ID
選擇了……
IDOK(1)
OK
IDCANCEL(2)
CANCEL
IDABORT(3)
ABORT
IDRETRY(4)
RETRY
IDIGNORE(5)
IGNORE
IDYES(6)
YES
IDNO(7)
NO

備註

通過將 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) 。
當您使用一個系統模式訊息框指示時,當系統記憶體不足時,由 lpText 和 lpCaption 的參數的字元串不應被從資源檔案,因為載入資源的嘗試可能會失敗。
如果在一個對話框存在時創建一個訊息框,則使用對話框的句柄作為hWnd 參數。hWnd參數不應指定為一個子視窗,就像對話框中的控制項一樣。

實例

#include<windows.h>//切記!當調用<windows.h>時,不要調用MFC!(Afx.h)int main(){    int result = MessageBox( NULL , 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;

MFC特例

假如您創建了一個MFC工程,如果工程文檔中有MainFrm.cpp的話,那么,本函式就被封裝成了:
int MessageBox(LPCTSTR lpszText,LPCTSTR lpszCaption=NULL,UINT nType = MB_OK);

參數

lpszText:指向一個字元串包含要顯示的訊息。
lpszCaption:指向一個字元串包含標題。
nType:指定訊息框的內容和行為。

返回值

指定函式的結果。
下面的例子可以讓我們對比兩種函式的用法,兩行代碼的功能都是顯示一個訊息框,內容為“示例用法”
::MessageBox(NULL, "示例用法", "demo", MB_OK);
MessageBox("示例用法");//採用了一些C++的語法特性使用訊息框用起來更順手

VB方法

函式原型:
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是默認按鈕
備註:函式原型中藍色字型部分的參數,可以通過點來獲取其後面跟隨的參數值。

相關詞條

熱門詞條

聯絡我們