属性表具有标准对话框不的功能:允许用户应用在关闭属性表之前所做的更改。 这是使用“应用”按钮完成的。 本文讨论可用于正确实现此功能的方法。
当用户单击“确定”关闭对话框时,模式对话框通常会将设置应用于外部对象。 属性表也是如此:当用户单击“确定”时,属性表中的新设置将生效。
但是,你可能希望允许用户保存设置,而无需关闭属性表对话框。 这是“应用”按钮的函数。 “应用”按钮将所有属性页中的当前设置应用于外部对象,而不是仅应用当前活动页面的当前设置。
默认情况下,“应用”按钮始终处于禁用状态。 必须编写代码才能在适当的时间启用“应用”按钮,并且必须编写代码来实现 Apply 的效果,如下所述。
如果不希望向用户提供“应用”功能,则无需删除“应用”按钮。 你可以将其禁用,因为使用标准属性表支持的应用程序在将来版本的 Windows 中也很常见。
若要将页面报告为正在修改并启用“应用”按钮,请调用 CPropertyPage::SetModified( TRUE )。 如果任何一个页面被报告为已修改,无论当前活动页面是否发生更改,“应用”按钮将保持为启用状态。
每当用户更改页面中的任何设置时,都应调用 CPropertyPage::SetModified 。 检测用户何时更改页面中的设置的一种方法是为属性页中的每个控件(如 EN_CHANGE 或 BN_CLICKED)实现更改通知处理程序。
若要实现“应用”按钮的效果,属性表必须告知其所有者或应用程序中的一些其他外部对象,才能在属性页中应用当前设置。 同时,属性表应通过调用 CPropertyPage::SetModified( FALSE ) 对其修改应用于外部对象的所有页面来禁用“应用”按钮。
有关此过程的示例,请参阅 MFC 常规示例 PROPDLG。