{{page>en:templates:win16api}}
====== MessageBox ======
===== Brief =====
The **MessageBox** function creates, displays, and operates a message box. The message box contains an application-defined message and title, plus any combination of predefined icons and push buttons.
===== Syntax =====
int MessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
===== Parameters =====
* hWnd - Handle to the owner window of the message box to be created. If this parameter is **NULL**, the message box has no owner window.
* lpText - Pointer to a null-terminated string containing the message to be displayed.
* lpCaption - Pointer to a null-terminated string used for the dialog box title. If this parameter is **NULL**, the default title "Error" is used.
* uType - Contains a set of bit flags that determine the content and behavior of the dialog box. This parameter can be a combination of flags from the following groups:
**Buttons:**
* **MB_ABORTRETRYIGNORE** - Contains Abort, Retry, and Ignore buttons.
* **MB_OK** - Contains one push button: OK (default).
* **MB_OKCANCEL** - Contains OK and Cancel buttons.
* **MB_RETRYCANCEL** - Contains Retry and Cancel buttons.
* **MB_YESNO** - Contains Yes and No buttons.
* **MB_YESNOCANCEL** - Contains Yes, No, and Cancel buttons.
**Icons:**
* **MB_ICONEXCLAMATION / MB_ICONWARNING** - Exclamation-point icon.
* **MB_ICONINFORMATION / MB_ICONASTERISK** - Information icon (i in a circle).
* **MB_ICONQUESTION** - Question-mark icon.
* **MB_ICONSTOP / MB_ICONERROR / MB_ICONHAND** - Stop-sign icon.
**Default Button:**
* **MB_DEFBUTTON1** - First button is default (default).
* **MB_DEFBUTTON2** - Second button is default.
* **MB_DEFBUTTON3** - Third button is default.
**Modality:**
* **MB_APPLMODAL** - Application-modal (default). User must respond to the message box before continuing work in the current window.
* **MB_SYSTEMMODAL** - System-modal (topmost). All applications are suspended until user responds.
* **MB_TASKMODAL** - Task-modal. Similar to MB_APPLMODAL but used when the calling application has no window handle.
**Other:**
* **MB_SETFOREGROUND** - Message box becomes the foreground window.
* **MB_TOPMOST** - Message box is placed above all non-topmost windows.
===== Return Code =====
The function returns zero if there is not enough memory to create the message box. If the call succeeds, the return value is one of the following menu-item values:
* **IDABORT** - Abort button was selected.
* **IDCANCEL** - Cancel button was selected.
* **IDIGNORE** - Ignore button was selected.
* **IDNO** - No button was selected.
* **IDOK** - OK button was selected.
* **IDRETRY** - Retry button was selected.
* **IDYES** - Yes button was selected.
===== Notes =====
* In Windows 16 (Janus), the system supports only a limited number of message boxes simultaneously.
* When using the **MB_SYSTEMMODAL** flag, the message box appears on top of all windows and is typically used for critical errors requiring immediate user attention.
* If a message box is created without an owner window (hWnd = NULL), it behaves as an independent window.
* The message box is modal and does not return control until the user closes it by pressing a button.
===== Example Code =====
==== C Binding ====
#include
int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
// Simple information message box
MessageBox(NULL,
"Hello, world! This is a message from Janus.",
"Win16 Example",
MB_OK | MB_ICONINFORMATION);
// Question message box with Yes/No/Cancel
int result = MessageBox(NULL,
"Do you want to save changes?",
"Confirmation",
MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON1);
// Handle the result
if (result == IDYES)
{
MessageBox(NULL, "You chose Yes", "Result", MB_OK | MB_ICONINFORMATION);
}
else if (result == IDNO)
{
MessageBox(NULL, "You chose No", "Result", MB_OK | MB_ICONINFORMATION);
}
else if (result == IDCANCEL)
{
MessageBox(NULL, "You chose Cancel", "Result", MB_OK | MB_ICONWARNING);
}
// Error message example
MessageBox(GetActiveWindow(),
"File not found. Please check the path.",
"Error",
MB_OK | MB_ICONSTOP | MB_SYSTEMMODAL);
return 0;
}
==== MASM Binding ====
; Example for MASM (Microsoft Macro Assembler)
; Assemble with: MASM /MX program.asm
; Link with: LINK program.obj,,,libw.lib,,
.MODEL LARGE
.386
INCLUDE windows.inc
.DATA
msg_hello DB "Hello, world!", 0
cap_hello DB "Greeting", 0
msg_question DB "Continue operation?", 0
cap_question DB "Question", 0
msg_yes DB "You pressed Yes", 0
msg_no DB "You pressed No", 0
msg_cancel DB "Operation cancelled", 0
cap_result DB "Result", 0
.CODE
START PROC FAR
; Initialize
push ds
pop ax
xor ax, ax
; Simple message box
push MB_OK OR MB_ICONINFORMATION ; uType
push OFFSET cap_hello ; lpCaption
push OFFSET msg_hello ; lpText
push 0 ; hWnd = NULL
call MessageBox
; Question message box
push MB_YESNOCANCEL OR MB_ICONQUESTION ; uType
push OFFSET cap_question ; lpCaption
push OFFSET msg_question ; lpText
push 0 ; hWnd = NULL
call MessageBox
; Check result (result is in AX)
cmp ax, IDYES
je show_yes
cmp ax, IDNO
je show_no
cmp ax, IDCANCEL
je show_cancel
jmp exit_program
show_yes:
push MB_OK OR MB_ICONINFORMATION
push OFFSET cap_result
push OFFSET msg_yes
push 0
call MessageBox
jmp exit_program
show_no:
push MB_OK OR MB_ICONINFORMATION
push OFFSET cap_result
push OFFSET msg_no
push 0
call MessageBox
jmp exit_program
show_cancel:
push MB_OK OR MB_ICONWARNING
push OFFSET cap_result
push OFFSET msg_cancel
push 0
call MessageBox
exit_program:
; Exit program
mov ax, 4C00h
int 21h
START ENDP
END START
===== See also =====
* [[MessageBoxIndirect]]
* [[MessageBeep]]
* [[DialogBox]]
* [[DialogBoxParam]]
* [[CreateDialog]]
* [[FlashWindow]]
* [[GetActiveWindow]]
* [[SetActiveWindow]]
{{page>en:templates:win16}}