创建无模式属性表

通常,你创建的属性表是有模式的。 使用模式属性表时,用户必须先关闭属性表,然后才能使用应用程序的任何其他部分。 本文介绍了可以用于创建无模式属性表的方法,该属性表允许用户在使用应用程序的其他部分时保持属性表打开。

若要将属性表显示为无模式对话框而不是模式对话框,请调用 CPropertySheet::Create 而不是 DoModal。 还必须实现一些额外的任务来支持无模式属性表。

其他任务之一是属性表打开时在属性表及其修改的外部对象之间交换数据。 这通常与标准无模式对话框的任务相同。 此任务的一部分是实现无模式属性表与属性设置应用到的外部对象之间的通信通道。 如果为无模式属性表从 CPropertySheet 派生一个类,则此实现要容易得多。 本文假定你已完成上述操作。

在无模式属性表与外部对象之间通信的一种方法(例如视图中的当前选定内容)定义从属性表到外部对象的指针。 在 CPropertySheet -derived 类中定义一个函数(调用方式类似于 SetMyExternalObject),以便每当焦点从一个外部对象转移到另一个外部对象时更改指针。 该 SetMyExternalObject 函数需要重置每个属性页的设置,以反映新选择的外部对象。 为此,该 SetMyExternalObject 函数必须能够访问属于 CPropertySheet 类的 CPropertyPage 对象。

在属性表中提供对属性页访问的最方便方法是将 CPropertyPage 对象嵌入到 CPropertySheet -derived 对象中。 在 CPropertySheet -derived 对象中嵌入 CPropertyPage 对象不同于模式对话框的典型设计,其中属性表的所有者创建 CPropertyPage 对象并通过 CPropertySheet::AddPage 将它们传递给属性表。

要确定何时应将无模式属性表的设置应用于外部对象,有许多用户界面备选方案。 一种备选方案是每当用户更改任何值时应用当前属性页的设置。 另一种选择是提供“应用”按钮,该按钮允许用户在将属性页提交给外部对象之前累积属性页中的更改。 有关处理“应用”按钮方法的信息,请参阅处理“应用”按钮一文。

另请参阅

属性表
交换数据
在 MFC 中使用对话框