通常,您创建的属性表将是模式。在使用一个模式属性表,则用户必须在使用应用程序的其他部分之前关闭属性表。本文介绍可用于创建非模式属性表允许用户保持属性表打开,在使用应用程序中的其他部分的方法。
若要显示属性表作为无模式对话框而不是模式对话框,请调用 CPropertySheet::Create 而不是 DoModal。您还必须实现一些多余的任务支持非模式属性表。
某个其他任务处于修改的属性表和外部对象之间交换数据特性表时处于打开状态。这通常是任务与标准无模式对话框中。的一部分此任务实现通信通道属性设置适用于的无模式属性表和外部对象之间的。,如果可从无模式属性表的, CPropertySheet 派生类此实现更加容易。本文假定您这样做。
通信的方法在非模式属性表和外部对象 (在视图 (如当前选定内容之间,) 将定义从属性表的指针到外部对象。定义一个函数 (调用类似 SetMyExternalObject) 在 CPropertySheet- 更改指针的派生类,就会将焦点从外部对象更改为另一个。SetMyExternalObject 功能需要重置每个属性页上的设置以反映最近选择的外部对象。为此, SetMyExternalObject 函数必须能够访问属于 CPropertySheet 类的 CPropertyPage 对象。
最方便的方式提供对属性表中的属性页将嵌入 CPropertyPage 对象在 CPropertySheet派生的对象。嵌入 CPropertyPage 对象在 CPropertySheet派生的对象与模式对话框的典型的模型不同,属性表所有者创建 CPropertyPage 对象传递到特性表通过 CPropertySheet::AddPage。
具有标识何时许多用户界面选择应应用非模式属性表的设置应用于外部对象。一种方法是应用当前属性页上的设置,只要用户更改任何值。另一种方法是提供适用按钮,允许用户在做出更改之前累积在属性页中的更改对外部对象。有关如何处理方式的信息适用按钮,请参见一 过程将按钮文章。