资源管理器样式自定义模板

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

要为资源管理器样式的打开或另存为对话框定义附加控件,请使用OPENFILENAME结构为包含其他控件的子对话框指定模板。如果您的子对话框模板是应用程序或动态链接库中的资源,请在成员中设置OFN_ENABLETEMPLATE标志,并使用结构的的hInstancelpTemplateName成员来标识模块和资源名称。如果模板已经在内存中,请设置OFN_ENABLETEMPLATEHANDLE标志并使用的hInstance成员来标识包含该模板的内存对象。当为资源管理器样式对话框提供子对话框模板时,还必须设置OFN_EXPLORER标志;否则,系统将假定您正在为旧式对话框提供替换模板。通常,如果您提供其他控件,您还必须提供资源管理器式挂钩过程处理新控件的邮件。

您可以按照任何其他模板创建子对话框模板,但必须指定WS_CHILD和WS_CLIPSIBLINGS样式,并应指定DS_3DLOOK和DS_CONTROL样式。系统需要WS_CHILD样式,因为您的模板定义了默认打开或另存为对话框的子对话框。WS_CLIPSIBLINGS样式确保子对话框不会在默认对话框中的任何控件上绘制。DS_3DLOOK样式确保子对话框中控件的外观与默认对话框中的控件一致。DS_CONTROL样式确保用户可以使用TAB和其他导航键在自定义对话框中的所有控件(默认或自定义)之间移动。

为了为新控件腾出空间,系统将通过自定义对话框的宽度和高度来扩展默认对话框。默认情况下,自定义对话框中的所有控件都位于默认对话框中的【下面】控件。但是,您可以通过在自定义对话框模板中包含静态文本控件并为其指定控件标识符值stc32来覆盖此默认定位。(该值在DLG.H头文件中定义。)在这种情况下,系统使用控件作为参考点,用于确定新控件的位置。stc32控件上方和左侧的所有新控件在默认对话框中的控件上方和左侧均位于相同的位置。stc32控件下方和右侧的新控件位于默认控件的下方和右侧。一般来说,每个新的控件都被定位,使得它具有相对于默认控件的位置与stc32控件的位置相同的位置。为了为这些新的控件腾出空间,系统根据需要在默认对话框的左,右,底部和顶部添加空间。

系统需要挂钩过程来处理所有要定制对话框的消息,因此将任何其他对话框程序发送相同的窗口消息给挂钩过程。例如,当用户单击自定义对话框中的按钮控件时,钩子过程接收WM_COMMAND消息。钩子过程负责初始化这些控件,并在对话框关闭时从控件中检索值。请注意,当挂接过程收到WM_INITDIALOG消息时,系统尚未将控件移动到其最终位置。

默认对话框过程处理默认对话框中所有控件的消息,但挂钩过程会收到WM_NOTIFY通知消息,供用户对这些控件进行操作,如资源管理器钩子程序所述。