結構原型
C++版
typedef struct {UINT cbSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpszText;
LPCTSTR lpszCaption;
DWORD dwStyle;
LPCTSTR lpszIcon;
DWORD_PTR dwContextHelpId;
MSGBOXCALLBACK lpfnMsgBoxCallback;
DWORD dwLanguageId;
} MSGBOXPARAMS, *PMSGBOXPARAMS;
VB版
這裡使用的施公有聲明,如果要轉為私有,請將Public改為Privatepublic Type MSGBOXPARAMS
cbSize As Long
hwndOwner As Long
hInstance As Long
lpszText As String
lpszCaption As String
dwStyle As Long
lpszIcon As String
dwContextHelpId As Long
lpfnMsgBoxCallback As Long
dwLanguageId As Long
End Type
成員解釋
cbSize
類型:UINT,無符號整數包含著這個結構的大小,以位元組計算。在C++中使用sizeof(MSGBOXPARAMS)來獲取,VB中使用Len(MSGBOXPARAMS)來獲取。
hwndOwner
類型:HWND,句柄對話框所有者視窗的句柄。這個參數可以為NULL。如果在VB中,填寫調用函式的過程所在的視窗句柄或主視窗的句柄;等同於C++中填寫NULL的是傳遞0。
hInstance
類型:HINSTANCE,實例的句柄包含用於lpszIcon參數的圖示(ICON)資源ID的,和用於lpszText 參數或lpszCaption 參數的字元串資源ID的模組句柄。如果不是使用圖示與字元串資源,這個參數可以傳NULL(C++)或0(VB)。當這個參數傳遞NULL(或0)的時候,lpszIcon、lpszText、 lpszCaption參數直接傳入對應的指針。如果這個參數傳遞不為NULL(或0),那么就應該傳遞程式的實例句柄,VB中使用App.hInstance來獲取自己當前程式的實例句柄。
lpszText
類型:LPCTSTR,字元串指針(VB中為String類型的字元串)一個以NULL結尾的字元串(當hInstance傳遞NULL的時候),或者字元串資源的ID(當hInstance不為NULL的時候),包含著訊息要顯示的內容。VB中就是String類型的字元串,VB的用戶請無視以NULL結尾這句話。
lpszCaption
類型:LPCTSTR,字元串指針一個字元串,類似lpszText,包含著訊息的標題,默認用“錯誤”作為標題。
dwStyle
類型:DWORD(VB中為Long)設定對話框的內容和行為。這個參數可以是描述MessageBoxEx函式的uType參數的旗標(flags)的組合。如下表。
此外,你可以指定MB_USERICON旗標 (C++:0x00000080L;VB:&H80&)如果你想訊息框顯示lpszIcon成員指定的圖示。
描述訊息框顯示的按鈕,由下面的數值之一指定(下面是顯示按鈕的旗標,只能選擇一個。後述中無特別註明的情況下可以與其他表的常數進行組合)
常數名稱 | C++值 | VB值 | 含義 |
---|---|---|---|
MB_ABORTRETRYIGNORE | 0x00000002L | &H2& | 訊息框包含三個按鈕:終止,重試,忽略。這個旗標一般用與錯誤提示與處理,讓用戶選擇錯誤的處理方法。 |
MB_CANCELTRYCONTINUE | 0x00000006L | &H6& | 訊息框包含三個按鈕:取消,重試,繼續。可以用這個旗標代替MB_ABORTRETRYIGNORE |
MB_HELP | 0x00004000L | &H4000& | 在訊息框增加一個幫助按鈕。當用戶單擊“幫助”按鈕的時候,或者按下F1的時候,系統會傳送一個WM_HELP訊息到訊息框的所有者,這個所有者由hwndOwner成員指定,如果要使用這個旗標,就不能將hwndOwner設為NULL(或0)。 |
MB_OK | 0x00000000L | &H0& | 訊息框包含一個按鈕“OK”。這個是默認值 |
MB_OKCANCEL | 0x00000001L | &H1& | 訊息框包含兩個按鈕:OK和“取消” |
MB_RETRYCANCEL | 0x00000005L | &H5& | 訊息框包含兩個按鈕:“重試” 和“取消” |
MB_YESNO | 0x00000004L | &H4& | 訊息框包含兩個按鈕:“是” 和“否” |
MB_YESNOCANCEL | 0x00000003L | &H3& | 訊息框包含三個按鈕:“是” ,“否”和“取消” |
在訊息框中顯示的圖示,由下面的數值之一指定(下面是顯示圖示的旗標,只能選擇一個。)
常數名稱 | C++值 | VB值 | 含義 |
---|---|---|---|
MB_ICONEXCLAMATIO 和 NMB_ICONWARNING | 0x00000030L | &H30& | 訊息框顯示一個感嘆號。數值和效果與MB_ICONEXCLAMATION是一樣的,只是你想表達的初衷不同,上一個代表的是傳達信息,這一個側重的是發出警告。 實際上,無論初衷是怎么樣,這兩個可以通用,分開兩個只是為了讓源程式更容易閱讀。 但是如果想發出信息,建議使用MB_ICONINFORMATION、NMB_ICONASTERISK之一,圖示將顯示小寫的i代表infomation(信息); 如果要發出警告,建議使用 MB_ICONSTOP、MB_ICONERROR、 MB_ICONHAND之一,這樣圖示會顯示叉。 這樣的訊息框的指示性可能會更強一些。 |
MB_ICONINFORMATIO 和 NMB_ICONASTERISK | 0x00000040L | &H40& | 訊息框將會顯示一個小寫的“i”,這個一般用作有訊息需要讓用戶知曉,重在訊息本身而不是程式當前的狀態。 |
MB_ICONQUESTION | 0x00000020L | &H20& | 訊息框顯示一個問號。問號訊息圖示不在引人注目是因為它不能明顯地指明訊息的類型,而且這樣的措辭可以運用到任何的訊息類型上。此外,用戶可能拒絕問號標記的幫助訊息。因此,不要在你的訊息框中用這個問號標記訊息符號。系統繼續支持這個僅僅是為了保持對過去的兼容性。 |
MB_ICONSTOP、 MB_ICONERROR、 MB_ICONHAND | 0x00000010L | &H10& | 一個停止符號(一個紅叉)顯示在訊息框上。 |
描述默認按鈕,由下面的數值之一指定(下面是確定默認按鈕的旗標,只能選擇一個,應該和第一張表中選擇的按鈕類型相匹配,可以與第二張表的常數進行組合)
常數名稱 | C++值 | VB值 | 含義 |
---|---|---|---|
MB_DEFBUTTON1 | 0x00000000L | &H0& | 第一個按鈕是默認按鈕。除非MB_DEFBUTTON2, MB_DEFBUTTON3, 或MB_DEFBUTTON4是指定的。 |
MB_DEFBUTTON2 | 0x00000100L | &H100& | 第二個按鈕是默認按鈕 |
MB_DEFBUTTON3 | 0x00000200L | &H200& | 第三個按鈕是默認按鈕 |
MB_DEFBUTTON4 | 0x00000300L | &H300& | 第四個按鈕是默認按鈕。一般來說,如果不使用MB_HELP旗標,最多只有三個按鈕,但是如果使用了這個旗標,那么第四個按鈕就是由MB_HELP旗標指定的幫助按鈕。 |
描述對話框的模式,由下面的數值之一指定(下面是對話框模式的旗標,只能選擇一個。)
Value | C++值 | VB值 | Meaning |
---|---|---|---|
MB_APPLMODAL | 0x00000000L | &H0& | 再通過hWnd參數指定的窗體繼續工作之前,用戶必須作出回響(由於這是MessageBox函式的描述中出現的表格,在這裡應該是本結構的hwndOwner成員指定的窗體)。然而,用戶可以移動其他執行緒的窗體,或者在其中工作。 這取決於(hwndOwner成員指定的所有者)視窗在程式中的序列(Z序列,反應窗體之間上下層疊關係的值),用戶可能可以移動當前執行緒內的其他窗體。(hwndOwner成員指定的所有者視窗的)所有子窗體都被自動禁用,但是彈出式窗體除外。MB_APPLMODAL 常數是默認值,如果既沒有MB_SYSTEMMODAL也沒有MB_TASKMODAL 被指定 |
MB_SYSTEMMODAL | 0x00001000L | &H1000& | 等同於有WS_EX_TOPMOST樣式的MB_APPLMODAL訊息框。用系統式訊息框去通知重要的用戶,潛在的破壞性錯誤需要立即引起重視(例如:記憶體溢出)。 |
MB_TASKMODAL | 0x00002000L | &H2000& | 等同於如果hWnd為NULL則屬於當前執行緒的頂級窗體被禁用的MB_APPLMODAL。當調用程式或庫沒有可以用的視窗句柄但仍然需要預防輸入到調用的執行緒中的其他窗體或沒有掛起的其他執行緒時用這個旗標。簡單來說,這個旗標掛起系統中的全部頂級窗體執行緒以防止以外的輸入。 |
指定其他選,,由下面的數值的一個或多個指定(下面是其它選項的旗標,不限選擇一個。)
常數名稱 | C++值 | VB值 | 含義 |
---|---|---|---|
MB_DEFAULT_DESKTOP_ONLY | 0x00020000L | &H20000& | 等同於互動式視窗的桌面。更多的信息,參見Window Stations。如果當前的輸入桌面不是默認桌面,MessageBox不會返回直到用戶選擇默認桌面。 |
MB_RIGHT | 0x00080000L | &H80000& | The text is right-justified. 文本右對齊 |
MB_RTLREADING | 0x00100000L | &H100000& | 顯示的訊息和標題文本使用從右到左的閱讀順序以支持希伯來文和阿拉伯文語言系統 |
MB_SETFOREGROUND | 0x00010000L | &H10000& | 訊息框變成前景窗體。本質上是系統對訊息框調用theSetForegroundWindow函式。根據theSetForegroundWindow函式的描述,系統使指定視窗放到前台並激活視窗的執行緒,鍵盤輸入被引導到這個視窗,並為這個視窗提供稍高的優先權。使用這個旗標可讓訊息框彈出到Z序列的最前方,讓用戶最快看到這個訊息框。 |
MB_TOPMOST | 0x00040000L | &H40000& | 訊息框用WS_EX_TOPMOST視窗樣式創建 |
MB_SERVICE_NOTIFICATION | 0x00200000L | &H200000& | 調用者是一個以事件通知用戶的服務。函式顯示一個訊息框在當前激活的桌面,儘管那裡沒有用戶登錄到電腦上。 終端服務:如果調用執行緒模擬令牌,該函式將在會話的訊息框中指定模擬令牌。 如果這個旗標被設定,hWnd參數(在這裡是hwndOwner)必須是NULL。這是以便訊息框出現在不與hWnd對應的桌面。 關於注意到使用這個旗標的安全性考慮的信息,參見Interactive Services。特別地,注意到這個旗標能鉤在鎖定的桌面上產生互動式內容,和因此應該用於一個有限的場景,例如資源枯竭。 |
lpszIcon
類型:LPCTSTR。字元串指針圖示資源的ID。這個參數可以是一個以null結尾的字元串,或者是通過MAKEINTRESOURCE 宏獲得的作為圖示資源ID的整數。去裝在一個標準系統定義的圖示,設定hInstance成員為NULL,並且設定lpszIcon為LoadIcon函式的值列表之一。如果dwStyle成員沒有指定MB_USERICON旗標,這個成員被忽略。
dwContextHelpId
類型:DWORD_PTR。雙字指針。VB中為按地址傳遞的Long變數。幫助內容的ID。如果一個Help事件發生,這個值在訊息框傳送到所有者視窗或回調函式的HELPINFO結構中被指定。
lpfnMsgBoxCallback
類型:MSGBOXCALLBACK。MsgBoxCallback回調函式的函式指針。VB中傳遞AdressOfMsgBoxCallback。一個處理訊息框幫助信息的回調函式的指針。回調函式原型如下:
C++版:
VOID CALLBACK MsgBoxCallback(LPHELPINFO lpHelpInfo);
VB版(必須定義在模組中):
public Type POINTAPI
x As Long
y As Long
End Type
public Type HELPINFO
cbSize As Long
iContextType As Long
iCtrlId As Long
hItemHandle As Long
dwContextId As Long
MousePos As POINTAPI
End Type
public sub MsgBoxCallback(ByRef lpHelpInfo As HELPINFO)
’處理幫助回調訊息的代碼
End sub
dwLanguageId
類型:雙字包含在原先定義的按鈕中的文本的語言。這個值必須是MAKELANGID 宏的返回值。關於支持的語言ID列表,參見Language Identifiers。註:每一個Windows的地區性發行版(例如簡體中文版)通常只包含有限的語言設定。因此,例如美國版提供LANG_ENGLISH,法國版提供LANG_FRENCH,德國版提供LANG_GERMAN,還有日本版提供LANG_JAPANESE。每一個版本提供LANG_NEUTRAL。這些有限的值可以用到dwLanguageId參數。在指定語言ID之前,你應該枚舉在一個系統本地已經安裝了的語言。
支持
客戶端最小支持 | Windows 2000 Professional 【僅桌面套用】 |
---|---|
伺服器最小支持 | Windows 2000 Professional 【僅桌面套用】 |
頭檔案 | Winuser.h (include Windows.h) |
Unicode 和ANSI 名 | MSGBOXPARAMSW (Unicode) 和MSGBOXPARAMSA (ANSI) |