与大多数对话框一样,属性表和应用程序之间的数据交换是属性表最重要的函数之一。 本文介绍如何完成此任务。
与属性表交换数据实际上是与属性表的各个属性页交换数据的问题。 使用属性页交换数据的过程与使用对话框交换数据的过程相同,因为 CPropertyPage 对象只是一个专用 的 CDialog 对象。 该过程利用框架的对话数据交换(DDX)设施,该工具在对话框对象的控件与对话框对象的成员变量之间交换数据。
与属性表交换数据与正常对话框之间的重要区别在于属性表具有多个页,因此您必须与属性表中的所有页面交换数据。 有关 DDX 的详细信息,请参阅 对话框数据交换和验证。
以下示例演示如何在视图和属性表的两页之间交换数据:
void CMyView::DoModalPropertySheet()
{
CPropertySheet propsheet;
CMyFirstPage pageFirst; // derived from CPropertyPage
CMySecondPage pageSecond; // derived from CPropertyPage
// Move member data from the view (or from the currently
// selected object in the view, for example).
pageFirst.m_nMember1 = m_nMember1;
pageFirst.m_nMember2 = m_nMember2;
pageSecond.m_strMember3 = m_strMember3;
pageSecond.m_strMember4 = m_strMember4;
propsheet.AddPage(&pageFirst);
propsheet.AddPage(&pageSecond);
if (propsheet.DoModal() == IDOK)
{
m_nMember1 = pageFirst.m_nMember1;
m_nMember2 = pageFirst.m_nMember2;
m_strMember3 = pageSecond.m_strMember3;
m_strMember4 = pageSecond.m_strMember4;
GetDocument()->SetModifiedFlag();
GetDocument()->UpdateAllViews(NULL);
}
}