Обмен данными
Как и в большинстве диалоговых окон, обмен данными между листом свойств и приложением является одной из наиболее важных функций листа свойств. В этой статье описывается, как выполнить эту задачу.
Обмен данными с листом свойств фактически является вопросом обмена данными с отдельными страницами свойств листа свойств. Процедура обмена данными со страницей свойств аналогична обмену данными с диалоговым окном, так как объект 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);
}
}