Scambio di dati
Come per la maggior parte delle finestre di dialogo, lo scambio di dati tra la finestra delle proprietà e l'applicazione è una delle funzioni più importanti della finestra delle proprietà. Questo articolo descrive come eseguire questa attività.
Lo scambio di dati con una finestra delle proprietà è in realtà una questione di scambio di dati con le singole pagine delle proprietà della finestra delle proprietà. La procedura per lo scambio di dati con una pagina delle proprietà equivale allo scambio di dati con una finestra di dialogo, poiché un oggetto CPropertyPage è solo un oggetto CDialog specializzato. La procedura sfrutta la funzionalità DDX (Dialog Data Exchange) del framework, che scambia i dati tra i controlli in una finestra di dialogo e le variabili membro dell'oggetto finestra di dialogo.
La differenza importante tra lo scambio di dati con una finestra delle proprietà e con una finestra di dialogo normale è che la finestra delle proprietà ha più pagine, pertanto è necessario scambiare dati con tutte le pagine della finestra delle proprietà. Per altre informazioni su DDX, vedere Scambio di dati e convalida della finestra di dialogo.
Nell'esempio seguente viene illustrato lo scambio di dati tra una visualizzazione e due pagine di una finestra delle proprietà:
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);
}
}