DialogBoxIndirect
The DialogBoxIndirect
macro creates a modal dialog box from a dialog box template in memory. DialogBoxIndirect
does not return control until the specified callback function terminates the
modal dialog box by calling the EndDialog function. The DialogBoxIndirect macro
uses the DialogBoxIndirectParam function.
int DialogBoxIndirect(
|
HINSTANCE hInstance, |
// handle to
application instance |
|
LPDLGTEMPLATE lpTemplate, |
// identifies
dialog box template |
|
HWND hWndParent, |
// handle to owner
window |
|
DLGPROC lpDialogFunc |
// pointer to
dialog box procedure |
|
); |
|
Parameters
hInstance
Identifies
the instance of the module that creates the dialog box.
lpTemplate
Pointer to a
global memory object containing a template that DialogBoxIndirect uses
to create the dialog box. A dialog box template consists of a header that
describes the dialog box, followed by one or more additional blocks of data
that describe each of the controls in the dialog box. The template can use
either the standard format or the extended format.
In a standard
template for a dialog box, the header is a DLGTEMPLATE structure followed by
additional variable-length arrays. The data for each control consists of a DLGITEMTEMPLATE structure followed by
additional variable-length arrays.
In an
extended template for a dialog box, the header uses the DLGTEMPLATEEX format and the control
definitions use the DLGITEMTEMPLATEEX format.
hWndParent
Identifies
the window that owns the dialog box.
lpDialogFunc
Pointer to
the dialog box procedure. For more information about the dialog box procedure,
see DialogProc.
Return Values
If the
function succeeds, the return value is the nResult parameter specified
in the call to the EndDialog
function that was used to terminate the dialog box.
If the
function fails, the return value is -1.
Remarks
The DialogBoxIndirect
macro uses the CreateWindowEx
function to create the dialog box. DialogBoxIndirect then sends a WM_INITDIALOG message to the dialog box
procedure. If the template specifies the DS_SETFONT style, the function also
sends a WM_SETFONT
message 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, DialogBoxIndirect
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.
In a standard
dialog box template, the DLGTEMPLATE structure and each of the DLGITEMTEMPLATE
structures must be aligned on DWORD boundaries. The creation data array
that follows a DLGITEMTEMPLATE structure must also be aligned on a DWORD
boundary. All of the other variable-length arrays in the template must must be
aligned on WORD boundaries.
In an
extended dialog box template, the DLGTEMPLATEEX header and each of the DLGITEMTEMPLATEEX
control definitions must be aligned on DWORD boundaries. The creation
data array, if any, that follows a DLGITEMTEMPLATEEX structure must also
be aligned on a DWORD boundary. All of the other variable-length arrays
in the template must be aligned on WORD boundaries.
All character
strings in the dialog box template, such as titles for the dialog box and
buttons, must be Unicode strings. To create code that works on both Windows NT
and Windows 95, use the MultiByteToWideChar function to generate these
Unicode strings.
Windows
95: The system can support a maximum
of 16,364 window handles.
See Also