彙編語言MessageBoxA函數:顯示消息框

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


圖片


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章