原文链接 -> 传送门
函数功能:
DialogBoxIndirectParam 函数用于在内存中创建一个基于模板的模态(模式)对话框。在显示对话框之前,函数把一个应用程序定义的值作为 WM_INITDIALOG 消息的 IParam 参数传到对话框。应用程序可用此值来初始化对话框控件。
API 函数原型:
注释:_In_ 说明该参数是输入的,_In_opt_ 说明该参数是输入同时是可选的。
INT_PTR WINAPI DialogBoxIndirectParam( _In_opt_ HINSTANCE hInstance, _In_ LPCDLGTEMPLATE hDialogTemplate, _In_opt_ HWND hWndParent, _In_opt_ DLGPROC lpDialogFunc, _In_ LPARAM dwInitParam );
参数解析:
|
参数 |
含义 |
|
hInstance |
指向创建对话框模块的句柄 |
|
lpTemplate |
1. DialogBoxIndirect 函数创建的对话框模板。一个对话框模板由描述对话框的标题组成,紧随其后的是一个或多个附加描述对话框控件的数据块,。模板可以是标准格式或扩展格式 |
|
hWndParent |
指向创建对话框父窗口的句柄 |
|
lpDialogFunc |
指向对话框应用程序的指针。有关更多的对话框应用程序的指针,参见 DialogProc 函数 |
|
dwInitParam |
用来传递到对话框的 WM_INITDIALOG 消息的 IParam 参数值 |
返回值:
1. 如果执行成功,则返回值是调用 EndDialog 函数时传给它的 nResult 参数;
2. 如果执行失败,有多种原因:如果参数 hWndParent 无效,返回 0(这是为了与以前版本的 Windows 兼容其他原因)。如果是其他情况的失败,返回 -1。
获取更多的错误信息,需要调用 GetLastError 函数。
备注:
1. DialogBoxIndirect 宏使用 CreateWindowEx 函数创建对话框。然后发送一个 WM_INITDIALOG 消息给对话框程序。如果模板指定 DS_SETFONT 或 DS_SHELLFONT 类型,则追加发送一个 WM_SETFONT 消息。无论模板是否指定了 WS_VISIBLE 风格,对话框都会显示,然后禁用父窗口,在然后开始处理自己的消息。
2. 当对话框调用 EndDialog 函数后,DialogBoxIndirectParam 函数销毁对话框,结束它的消息循环,激活其父窗口(如果可以被激活的话),返回由对话框处理函数指定的 nResult 参数(它是被传递给 EndDialog 函数的)。
3. 在标准的对话框模版中 DLGITEMTEMPLATE 结构和每个 DLGTEMPLATE 结构大小必须是 DWORD 整数倍。跟随着 DLGITEMTEMPLATE 结构后面的数据数组大小也必须是 DWORD 的整数倍。模板中其他所有的可变长度数组大小必须是 WORD 的整数倍。
4. 在扩展对话框模板 DLGTEMPLATEEX 头和每个 DLGITEMTEMPLATEEX 控键定义大小必须是 DWORD 整数倍。跟随着 DLGITEMTEMPLATEEX 结构如果有数据数组大小也必须是 DWORD 整数倍。在扩展模板中其他所有的可变长度数组大小必须是 WORD 的整数倍。
5. 所有对话框模板中的字符串,比如对话框的标题和按钮的标题,必须是 Unicode 字符串(可以使用 MultiByteToWideChar 函数把 ANSI 字符串转成 Unicode 字符串)。
需求:
|
Minimum supported client |
Windows 2000 专业版 [仅桌面应用程序] |
|
Minimum supported server |
Windows 2000 服务器版 [仅桌面应用程序] |
|
Header |
Winuser.h (包含于 Windows.h) |
|
Library |
User32.lib |
|
DLL |
User32.dll |
|
Unicode and ANSI names |
DialogBoxIndirectParamW (Unicode) 和 DialogBoxIndirectParamA (ANSI) |




