DialogBoxParam function (Windows)

Switch View :
ScriptFree
DialogBoxParam function

Applies to: desktop apps only

Creates a modal dialog box from a dialog box template resource. Before displaying the dialog box, the function passes an application-defined value to the dialog box procedure as the lParam parameter of the WM_INITDIALOG message. An application can use this value to initialize dialog box controls.

Syntax

INT_PTR WINAPI DialogBoxParam(
  __in_opt  HINSTANCE hInstance,
  __in      LPCTSTR lpTemplateName,
  __in_opt  HWND hWndParent,
  __in_opt  DLGPROC lpDialogFunc,
  __in      LPARAM dwInitParam
);

Parameters

hInstance [in, optional]

Type: HINSTANCE

A handle to the module whose executable file contains the dialog box template.

lpTemplateName [in]

Type: LPCTSTR

The dialog box template. This parameter is either the pointer to a null-terminated character string that specifies the name of the dialog box template or an integer value that specifies the resource identifier of the dialog box template. If the parameter specifies a resource identifier, its high-order word must be zero and its low-order word must contain the identifier. You can use the MAKEINTRESOURCE macro to create this value.

hWndParent [in, optional]

Type: HWND

A handle to the window that owns the dialog box.

lpDialogFunc [in, optional]

Type: DLGPROC

A pointer to the dialog box procedure. For more information about the dialog box procedure, see DialogProc.

dwInitParam [in]

Type: LPARAM

The value to pass to the dialog box in the lParam parameter of the WM_INITDIALOG message.

Return value

Type: INT_PTR

If the function succeeds, the return value is the value of the nResult parameter specified in the call to the EndDialog function used to terminate the dialog box.

If the function fails because the hWndParent parameter is invalid, the return value is zero. The function returns zero in this case for compatibility with previous versions of Windows. If the function fails for any other reason, the return value is –1. To get extended error information, call GetLastError.

Remarks

The DialogBoxParam function uses the CreateWindowEx function to create the dialog box. DialogBoxParam then sends a WM_INITDIALOG message (and a WM_SETFONT message if the template specifies the DS_SETFONT or DS_SHELLFONT style) to the dialog box procedure. The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style), disables the owner window, and starts its own message loop to retrieve and dispatch messages for the dialog box.

When the dialog box procedure calls the EndDialog function, DialogBoxParam destroys the dialog box, ends the message loop, enables the owner window (if previously enabled), and returns the nResult parameter specified by the dialog box procedure when it called EndDialog.

Requirements

Minimum supported client

Windows 2000 Professional

Minimum supported server

Windows 2000 Server

Header

Winuser.h (include Windows.h)

Library

User32.lib

DLL

User32.dll

Unicode and ANSI names

DialogBoxParamW (Unicode) and DialogBoxParamA (ANSI)

See also

Reference
CreateWindowEx
DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogProc
EndDialog
MAKEINTRESOURCE
WM_INITDIALOG
WM_SETFONT
Conceptual
Dialog Boxes

 

 

Send comments about this topic to Microsoft

Build date: 2/10/2012

Community Content

Henrik Haftmann
How it works
DialogBoxParam() calls CreateWindowEx() not only once but for every child window too (which is done by CreateDialogParam()). The internal code is roughly:
BOOL b=EnableWindow(hWndParent,FALSE);
HWND w=CreateDialogParam(hInstance,lpTemplateName,hWndParent,lpDialogFunc,dwInitParam);
ShowWindow(w,SW_SHOW); // always shown, regardless of WS_VISIBLE flag
MSG msg;
while (GetMessage(&msg,0,0,0)) {  // assuming that EndDialog() is posting WM_QUIT, which is not true
 if (IsDialogMessage(w,&msg)) continue;
 TranslateMessage(&msg);
 DispatchMessage(&msg);
}
DestroyWindow(w);
EnableWindow(hWndParent,b);
return msg.wParam;
The middle code section forms the typical message-pump loop. Therefore, you can write simple and useful Windows programs with a single DialogBoxParam() in its WinMain() (or WinMainCRTStartup(), omitting the run-time library) function.