函数功能:该挂钩函数是应用程序定义的或库定义的回调函数,此回调函数与Explorer_Style和Save As公共对话框一起使用。函数贮存从公共对话框发送来的消息或通知LPOFNHOOKPROC类型定义一个指向回调函数指针,OFNHOOKProc是应用程序定义的或库定义的函数名的位置占有者,当创建一个Open或Save As公共对话框时,如果没有指定OFN_EXPLORER标志且需一个挂钩函数。必须用旧式的OFNHookProcOldSttyle挂钩函数。这种情况下对话框将显示旧式的用户界面。

    函数原型:UINT CALLBACK OFNHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);

    参数:

    hdlg:指向Open或Save as对话框的子对话框的句柄。用GetParent函数可得到指向Open或Save As对话框窗口的句柄。

    uiMsg.标识存放的消息。

    wParam:指定有关消息的其他信息。精确的意义要根据uiMSg参数的值来决定。

    IParam;指定有关消息的其他信息。精确的意义要根据uiMsg参数的值来决定。如果uiMsg参数显示了WM_INITDIALOG消息,IParam是一个指向OPENFILENAME结构的指针。该结构含有创建对话框时指定的值。

    返回值:如果挂钩函数返回零,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺省对话框函数忽略消息。对于CDN_SHAREVIOLATION和CDN_FILEOK通告消息,挂钩函数应该返回非零值,以表明已经利用SetWindowLong函数设置了一个非零DWL_MSGRESULT值。

    备注:当用GetOpenFileName或GetSaveFileName函数创建浏览器风格的Open或Save As公共对话框时,可以提供一个OFNHookProc挂钩函数。为使挂钩函数生效,须应用传递到对话创建函数的OPENFILENAME结构,且须指定一个指向PfnHook成员中的挂钩函数的指针,及指定Flags成员中OFN_ENABLEHOOK标识。

    如果为浏览器风格的公共对话框提供了一个挂钩函数,系统创建了一个缺省对话框的子对话框,挂钩函数为子对话框作为对话函数,此子对话框以OPENHLENAME结构指定的模块为基础,或如果没有指定模板,对话框是一个缺省的子对话框。当缺省对话框函数正在创建WM_INITDALOG消息时,创建了子对话框。在子对话框处理它本身的WM_INITDIALOG消息时,缺省对话函数删除掉标准控制面板,如果需要,可为子对话框的其他的任何一个控制面板提供空间,然后系统将CDN_INITDONE通告消息发送给挂钩函数。

    挂钩函数不接收指定给缺省对话框的标准控制面板的消息。可以对控制面板进行子分类,但是如果控制面板使应用程序与公共对话框将来的版本不一致,那么不能进行子分类。但浏览器风格的公共对话框提供了一套消息,此挂钩函数可利用此消息来最小化和控制对话框。它包括了从对话框发送来的一组通知消息,还有可以发送到从对话框检取信息的消息。关于这些消息的全部列表,参见EXplorer-Style HookProcedures。如果挂钩函数处理WM_CTLCOLORDLG信息,它必须返回一个有效的刷子句柄,以刷对话的背景。总之,如果挂钩函数处理任何一个WM_CTLCOLOR消息,那么必须返回一个有效刷子句柄,以绘制指定控制背景。不须从挂钩函数调用EndDialog函数。相反,挂钩能调用PostMessage函数把带有IDABORT值的一个WM_COMMAND信息,传送给对话框函数Posting IDABORT来关闭对话框,使对话框函数返回FALSE值。若要了解为什么挂钩函数关闭对话框,必须提供挂钩函数和应用程序之间的联系机理。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:commdlg.h;库文件:用户自定义。