LPOFNHOOKPROC 回调函数 (commdlg.h)
[从 Windows Vista 开始, “打开 ”和“ 另存为 ”常用对话框已被 “通用项”对话框取代。 建议使用通用项对话框 API,而不是通用对话框库中的这些对话框。]
接收从对话框发送的通知消息。 该函数还接收通过指定子对话框模板定义的任何其他控件的消息。 OFNHookProc 挂钩过程是应用程序定义的或库定义的回调函数,用于资源管理器样式的“打开”和“另存为”对话框。
LPOFNHOOKPROC 类型定义指向此回调函数的指针。 OFNHookProc 是应用程序定义的函数名称的占位符。
语法
LPOFNHOOKPROC Lpofnhookproc;
UINT_PTR Lpofnhookproc(
HWND unnamedParam1,
UINT unnamedParam2,
WPARAM unnamedParam3,
LPARAM unnamedParam4
)
{...}
参数
unnamedParam1
“ 打开 ”或“ 另存为 ”对话框的子对话框的句柄。 使用 GetParent 函数获取“ 打开 ”或“ 另存为 ”对话框的句柄。
unnamedParam2
正在接收的消息的标识符。
unnamedParam3
关于消息的附加信息。 确切的含义取决于 unnamedParam2 参数的值。
unnamedParam4
关于消息的附加信息。 确切的含义取决于 unnamedParam2 参数的值。 如果 unnamedParam2 参数指示 WM_INITDIALOG 消息, 则 unnamedParam4 是指向 OPENFILENAME 结构的指针,其中包含创建对话框时指定的值。
返回值
如果挂钩过程返回零,则默认对话框过程将处理消息。
如果挂钩过程返回非零值,则默认对话框过程将忽略该消息。
对于 CDN_SHAREVIOLATION 和 CDN_FILEOK 通知消息,挂钩过程应返回非零值,以指示它已使用 SetWindowLong 函数设置非零 DWL_MSGRESULT 值。
注解
如果在创建“打开”或“另存为”对话框时未指定OFN_EXPLORER标志,并且需要挂钩过程,则必须使用旧样式的 OFNHookProcOldStyle 挂钩过程。 在这种情况下,对话框将具有旧式用户界面。
使用 GetOpenFileName 或 GetSaveFileName 函数创建资源管理器样式 的“打开 或 另存为 ”对话框时,可以提供 OFNHookProc 挂钩过程。 若要启用挂钩过程,请使用传递给对话框创建函数的 OPENFILENAME 结构。 在 lpfnHook 成员中指定指向挂钩过程的指针,并在 Flags 成员中指定OFN_ENABLEHOOK标志。
如果为资源管理器样式的常用对话框提供挂钩过程,系统将创建一个作为默认对话框的子对话框。 挂钩过程充当子对话的对话过程。 此子对话基于在 OPENFILENAME 结构中指定的模板,如果未指定任何模板,则为默认子对话。 当默认对话过程处理其 WM_INITDIALOG 消息时,将创建子对话。 在子对话处理其自己的 WM_INITDIALOG 消息后,默认对话过程将移动标准控件(如有必要),以便为子对话的任何其他控件腾出空间。 然后,系统将 CDN_INITDONE 通知消息发送到挂钩过程。
挂钩过程不会接收适用于默认对话框的标准控件的消息。 你可以对标准控件进行子类化,但不建议这样做,因为这会使应用程序与更高版本不兼容。 但是,资源管理器样式的通用对话框提供了一组消息,挂钩过程可以使用这些消息来监视和控制对话。 其中包括一组从对话发送的通知消息,以及可用于从对话框中检索信息的消息。 有关这些消息的完整列表,请参阅 资源管理器样式挂钩过程。
如果挂钩过程处理 WM_CTLCOLORDLG 消息,则必须返回有效的画笔句柄来绘制对话框的背景。 通常,如果它处理任何 WM_CTLCOLOR* 消息,则必须返回有效的画笔句柄来绘制指定控件的背景。
请勿从挂钩过程中调用 EndDialog 函数。 相反,挂钩过程可以调用 PostMessage 函数,将具有 IDCANCEL 值的WM_COMMAND消息发布到对话框过程。 发布 IDCANCEL 将关闭对话框,并导致对话框函数返回 FALSE。 如果需要了解挂钩过程关闭对话框的原因,则必须在挂钩过程与应用程序之间提供自己的通信机制。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | commdlg.h (包括 Windows.h) |
另请参阅
概念性
引用