### 函数功能

该挂钩函数是应用程序定义的或库定义的回调函数，此回调函数与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；库文件：用户自定义。