Win32 應用程序生成輸岀的一個最簡單的方法就是調用 MessageBoxA 函數:
MessageBoxA PROTO, hWnd:DWORD, ;窗口句柄(可以爲空) lpText:PTR BYTE, ;字符串,對話框內 lpCaption:PTR BYTE, ;字符串,對話框標題 uType:DWORD ;內容和行爲
基於控制檯的應用程序可以將 hWnd 設置爲空,表示該消息框沒有相關的包含窗口或父窗口。lpText 參數是指向空字節結束字符串的指針,該字符串將出現在消息框內。lpCaption 參數指向作爲對話框標題的空字節結束字符串。uType 參數指定對話框的內容和行爲。
內容和行爲
uType 參數包含的位圖整數組合了三種選項:顯示按鈕、圖標和默認按鈕選擇。幾種可能的按鈕組合如下:
MB_OK
MB_OKCANCEL
MB_YESNO
MB_YESNOCANCEL
MB_RETRYCANCEL
MB_ABORTRETRYIGNORE
MB_CANCELTRYCONTINUE
默認按鈕
可以選擇按鈕作爲用戶點擊 Enter 鍵時的自動選項。選項包括 MB_DEFBUTTON1(默認)、MB_DEFBUTTON2、MB_DEFBUTTON3 和 MB_DEFBUTTON4。按鈕從左到右,從 1 開始編號。
圖標
有四個圖標可用。有時多個常數會產生相同的圖標:
停止符:MB_ICONSTOP. MB_ICONHAND 或 MB_ICONERROR
問號(?):MB_ICONQUESTION
信息符(i):MB_ICONINFORMATION、MB_ICONASTERISK
感嘆號(!):MB_ICONEXCLAMATION、MB_ICONWARNING
返回值
如果 MessageBoxA 失敗,則返回零;否則,它將返回一個整數以表示用戶在關閉對話框時點擊的按鈕。選項包括 IDABORT、IDCANCEL、IDCONTINUE、IDIGNORE、IDNO、IDOK、IDRETRY、IDTRYAGAIN,以及 IDYES。
Smallwin.inc 將 MessageBoxA 重定義爲 MessageBox,這個名字看上去具有更強的用戶友好性。
如果想要消息框窗口浮動於桌面所有其他窗口之上,就在傳遞的最後一個參數(uType 參數)值上添加 MB_SYSTEMMODAL 選項。
1) 演示程序
下面將通過一個小程序來演示函數 MessageBoxA 的一些功能。第一個函數調用顯示一條警告信息:
第二個函數調用顯示一個問號圖標以及 Yes/No 按鈕。如果用戶選擇 Yes 按鈕,則程序利用返回值選擇一個操作:
第三個函數調用顯示一個信息圖標以及三個按鈕:
第四個函數調用顯示一個停止圖標和一個 OK 按鈕:
2) 程序清單
MessageBoxA 演示程序的完整清單如下所示。函數 MessageBoxA 重命名爲函數 MessageBox,這樣就可以使用更加簡單的函數名:
; 演示 MessageBoxAINCLUDE Irvine32.inc.datacaptionW BYTE "Warning",0warningMsg BYTE "The current operation may take years " BYTE "to complete.",0captionQ BYTE "Question",0questionMsg BYTE "A matching user account was not found." BYTE 0dh,0ah,"Do you wish to continue?",0 captionC BYTE "Information",0infoMsg BYTE "Select Yes to save a backup file " BYTE "before continuing,",0dh,0ah BYTE "or click Cancel to stop the operation",0captionH BYTE "Cannot View User List",0haltMsg BYTE "This operation not supported by your " BYTE "user account.",0 .codemain PROC; 顯示感嘆號圖標和 OK 按鈕 INVOKE MessageBox, NULL, ADDR warningMsg, ADDR captionW, MB_OK + MB_ICONEXCLAMATION; 顯示問號圖標和 Yes/No 按鈕 INVOKE MessageBox, NULL, ADDR questionMsg, ADDR captionQ, MB_YESNO + MB_ICONQUESTION ; 解釋用戶點擊的按鈕 cmp eax,IDYES ; YES button clicked?; 顯示信息圖標和 Yes/No/Cancel 按鈕 INVOKE MessageBox, NULL, ADDR infoMsg, ADDR captionC, MB_YESNOCANCEL + MB_ICONINFORMATION \ + MB_DEFBUTTON2; 顯示停止圖標和 OK 按鈕 INVOKE MessageBox, NULL, ADDR haltMsg, ADDR captionH, MB_OK + MB_ICONSTOP exitmain ENDPEND main