宏DialogBoxIndirect从内存中的对话框模板创建一个模态对话框。DialogBoxIndirect不会返回控制,直到指定的回调函数通过调用EndDialog函数终止模态对话框。DialogBoxIndirect宏使用DialogBoxIndirectParam功能。
int DialogBoxIndirect(
HINSTANCE 【的hInstance】, | //处理应用程序实例 |
LPDLGTEMPLATE 【lpTemplate】, | //标识对话框模板 |
HWND 【hWndParent】, | //处理所有者窗口 |
DLGPROC 【lpDialogFunc】 | //指向对话框的过程 |
); |
参数
【的hInstance】
标识创建对话框的模块的实例。
【lpTemplate】
指向包含DialogBoxIndirect用于创建对话框的模板的全局内存对象。对话框模板由描述该对话框的标题组成,后跟一个或多个附加的数据块,描述对话框中的每个控件。模板可以使用标准格式或扩展格式。
在对话框的标准模板中,标题是DLGTEMPLATE结构,后面跟着可变长度的数组。每个控件的数据由DLGITEMTEMPLATE结构和其他可变长度数组组成。
在对话框的扩展模板中,标题使用DLGTEMPLATEEX格式,控件定义使用DLGITEMTEMPLATEEX格式。
【hWndParent】
标识拥有该对话框的窗口。
【lpDialogFunc】
指向对话框的过程。有关对话框过程的详细信息,请参阅DialogProc.
返回值
如果函数成功,则返回值是在用于终止对话框的EndDialog函数调用中指定的【如果函数失败,返回值为-1。】参数。
如果函数失败,返回值为-1。
备注
DialogBoxIndirect宏使用CreateWindowEx功能创建对话框。DialogBoxIndirect然后向对话框过程发送WM_INITDIALOG消息。如果模板指定DS_SETFONT样式,该函数还会向对话框过程发送一个WM_SETFONT消息。该函数显示对话框(无论模板是否指定WS_VISIBLE样式),禁用所有者窗口,并启动自己的消息循环来检索和调度对话框的消息。
当对话框过程调用EndDialog功能时,DialogBoxIndirect破坏对话框,结束消息循环,启用所有者窗口(如果先前已启用),并返回对话框过程指定的【如果函数失败,返回值为-1。】参数称为EndDialog.
在标准对话框模板中,DLGTEMPLATE结构和每个DLGITEMTEMPLATE结构必须在DWORD边界上对齐。DLGITEMTEMPLATE结构之后的创建数据数组也必须在DWORD边界上对齐。模板中的所有其他可变长度数组必须在WORD边界上对齐。
在扩展对话框模板中,DLGTEMPLATEEX标题和DLGITEMTEMPLATEEX控件定义中的每一个必须在DWORD边界上对齐。DLGITEMTEMPLATEEX结构之后的创建数据数组(如果有)也必须在DWORD边界上对齐。模板中的所有其他可变长度数组必须在WORD边界上对齐。
对话框模板中的所有字符串,如对话框和按钮的标题必须是Unicode字符串。要创建适用于Windows NT和Windows 95的代码,请使用MultiByteToWideChar函数生成这些Unicode字符串。
Windows 95:系统最多支持16,364个窗口句柄。
也可以看看
CreateWindowEx, DialogBox, DialogBoxIndirectParam, DialogBoxParam, DialogProc, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATE, DLGTEMPLATEEX, EndDialog, MultiByteToWideChar, WM_INITDIALOG, WM_SETFONT