资源管理器式挂钩程序

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

您可以通过提供钩子过程,自定义模板或两者来自定义资源管理器样式的打开或另存为对话框。如果为资源管理器样式对话框提供了一个挂钩过程,系统将创建一个对话框,该对话框是默认对话框的子对象。钩子过程作为子对话框的对话过程。此子对话框基于自定义模板,如果没有提供,则在默认模板上。有关详细信息,请参阅Explorer风格的自定义模板.要为资源管理器式打开或另存为对话框启用挂钩过程,请在创建对话框时使用OPENFILENAME结构。在成员中设置OFN_ENABLEHOOK和OFN_EXPLORER标志,并在lpfnHook成员中指定OFNHookProc挂钩过程的地址。如果提供一个挂钩过程并省略OFN_EXPLORER标志,则必须使用OFNHookProcOldStyle挂钩过程,您将获得旧式用户界面。有关详细信息,请参阅自定义旧式对话框.

资源管理器式挂钩过程在对话框打开时接收各种消息。这些包括以下内容:

* WM_INITDIALOG消息和其他标准对话框消息,如WM_CTLCOLORDLG控制颜色消息。

*一组WM_NOTIFY通知消息,指示用户或其他对话框事件所采取的操作。

*通过指定子对话框模板定义的任何其他控件的消息。

此外,还有一组消息可以发送到资源管理器样式的对话框以获取信息或控制对话框的行为和外观。

如果为资源管理器样式对话框提供了一个挂钩过程,则默认对话框过程将在默认对话框过程处理其WM_INITDIALOG消息时创建一个子对话框。钩子过程作为子对话框的对话过程。此时,挂钩过程接收到自己的WM_INITDIALOG消息,其中【lParam的】参数设置为用于初始化对话框的OPENFILENAME结构的地址。子对话完成处理自己的WM_INITDIALOG消息后,默认对话框过程将移动标准控件,如有必要,为子对话框的任何其他控件腾出空间。默认对话框过程会将CDN_INITDONE通知消息发送到挂钩过程。

挂钩过程接收到WM_NOTIFY通知消息,指示用户在对话框中执行的操作。您可以使用其中一些消息来控制对话框的行为。例如,当用户选择文件名并单击确定按钮时,挂钩过程会收到CDN_FILEOK消息。响应此消息,挂钩过程可以使用SetWindowLong功能拒绝所选的名称,并强制对话框保持打开状态。

每个WM_NOTIFY消息的【lParam的】参数是指向定义操作的OFNOTIFY结构的指针。OFNOTIFY结构标题中的成员包含以下通知代码之一。

CDN_FILEOKThe user clicked the OK button; the dialog box is about to close.
CDN_FOLDERCHANGE用户打开一个新的文件夹或目录。
CDN_HELP用户点击帮助按钮。
CDN_INITDONE系统完成初始化对话框,对话框完成WM_INITDIALOG消息的处理。此外,系统已经完成在公共对话框中排列控件,为子对话框(如果有)的控件腾出空间。
CDN_SELCHANGE用户从文件列表中选择一个新的文件或文件夹。
CDN_SHAREVIOLATION公共对话框遇到关于要返回的文件的共享冲突。
CDN_TYPECHANGE用户从文件类型列表中选择一个新的文件类型。

这些WM_NOTIFY消息取代先前版本的打开和另存为对话框使用的FILEOKSTRINGLBSELCHSTRINGSHAREVISTRINGHELPMSGSTRING注册的消息。但是,如果WM_NOTIFY处理不使用SetWindowLong设置非零的DWL_MSGRESULT值,挂钩过程也会在WM_NOTIFY消息之后接收替换的消息。

要检索有关对话框状态的信息或控制对话框的行为和外观,挂接过程可以将以下消息发送到对话框。

CDM_GETFILEPATH检索所选文件的路径和文件名。
CDM_GETFOLDERIDLIST检索对话框已打开的当前文件夹对应的项目标识符列表。有关项目标识符列表的更多信息,请参阅项目标识符和标识符列表.
CDM_GETFOLDERPATH检索对话框的当前文件夹或目录的路径。
CDM_GETSPEC检索对话框中当前选择的文件的文件名(不包括路径)。
CDM_HIDECONTROL隐藏指定的控件。
CDM_SETCONTROLTEXT设置指定控件中的文本。
CDM_SETDEFEXT设置对话框的默认文件扩展名。