OFNHookProc

【勇芳软件工作室】汉化HomePreviousNext

一个OFNHookProc挂接过程是一个应用程序定义或库定义的回调过程,它与Explorer风格的Open和Save As常用对话框一起使用。挂钩过程接收从公共对话框发送的通知消息。挂钩过程还会接收通过指定子对话框模板定义的任何其他控件的消息。

如果您在创建“打开”或“另存为公共”对话框时未指定OFN_EXPLORER标志,并且希望使用挂钩过程,则必须使用旧式OFNHookProcOldStyle挂接过程。在这种情况下,对话框将具有旧式用户界面。

UINT APIENTRY OFNHookProc(la

HWND 【hdlg】,//处理子对话窗口
UINT 【uiMsg】,//消息标识符fr
WPARAM 【wParam中】,// message参数
LPARAM 【lParam的】// message参数
); 

参数

【hdlg】

处理“打开”或“另存为”对话框的子对话框。使用GetParent函数获取打开或另存为对话框窗口的句柄。

【uiMsg】

标识正在接收的消息。

【wParam中】

指定有关该消息的附加信息。具体含义取决于【uiMsg】参数的值。

【lParam的】

指定有关该消息的附加信息。具体含义取决于【uiMsg】参数的值。

如果【uiMsg】参数指示WM_INITDIALOG消息,【lParam的】是指向OPENFILENAME结构的指针,其中包含创建对话框时指定的值。

返回值

如果挂钩过程返回零,则默认对话框过程将处理该消息。

如果挂钩过程返回非零值,则默认对话框过程将忽略该消息。

对于CDN_SHAREVIOLATIONCDN_FILEOK通知消息,挂接过程应返回非零值,表示已使用SetWindowLong函数设置非零DWL_MSGRESULT值。

备注

当您使用GetOpenFileNameGetSaveFileName功能创建资源管理器式打开或另存为公共对话框时,可以提供OFNHookProc挂接过程。要启用挂钩过程,请使用传递给对话框创建功能的OPENFILENAME结构。在lpfnHook成员中指定挂钩过程的指针,并在成员中指定OFN_ENABLEHOOK标志。

如果为Explorer风格的公共对话框提供了一个挂钩过程,系统将创建一个对话框,该对话框是默认对话框的子项。钩子过程作为子对话框的对话过程。此子对话框基于您在OPENFILENAME结构中指定的模板,或者如果未指定模板,则为默认子对话框。当默认对话框过程正在处理其WM_INITDIALOG消息时,将创建子对话框。在子对话框处理其自己的WM_INITDIALOG消息之后,默认对话框过程将移动标准控件,如有必要,为子对话框的任何其他控件腾出空间。系统然后将CDN_INITDONE通知消息发送到挂钩过程。

挂接过程不接收默认对话框的标准控件的消息。您可以对标准控件进行子类化,但这是不鼓励的,因为它可能会使您的应用程序与公共对话框的未来版本不兼容。但是,Explorer风格的公共对话框提供了一组消息,挂钩过程可用于监视和控制对话框。这些包括从对话框发送的一组WM_NOTIFY通知消息,以及可以发送以从对话框中检索信息的消息。有关这些消息的完整列表,请参阅“资源管理器钩子程序”。

如果挂接过程处理WM_CTLCOLORDLG消息,它必须返回一个有效的画笔句柄来绘制对话框的背景。一般来说,如果处理任何WM_CTLCOLOR *消息,它必须返回一个有效的画笔句柄来绘制指定控件的背景。

不要从挂钩过程调用EndDialog功能。相反,挂钩过程可以调用PostMessage函数将具有IDABORT值的WM_COMMAND消息发布到对话框过程。发布IDABORT关闭对话框,并使对话框功能返回FALSE。如果您需要知道挂钩过程为何关闭对话框,则必须在挂钩过程和应用程序之间提供自己的通信机制。

OFNHookProc是应用程序定义或库定义的函数名称的占位符。LPOFNHOOKPROC类型是指向OFNHookProcOFNHookProcOldStyle挂接过程的指针。

也可以看看

GetOpenFileName, GetSaveFileName, OFNHookProcOldStyle, OPENFILENAME