次の方法で共有


データの交換

通常のダイアログ ボックスと同じように、プロパティ シートとアプリケーション間のデータ交換は、プロパティ シートの最も重要な機能の 1 つです。 ここでは、このタスクを遂行する方法を説明します。

プロパティ シートとのデータ交換は、実際にはプロパティ シートの各プロパティ ページとのデータ交換です。 CPropertyPage オブジェクトは特殊な CDialog オブジェクトに過ぎないため、プロパティ ページとの間でデータを交換する手順はダイアログ ボックスとの間でデータを交換する場合と同じです。 その手順では、フレームワークのダイアログ データ エクスチェンジ (DDX: Dialog Data Exchange) 機能が利用されます。この機能では、ダイアログ ボックスのコントロールとダイアログ ボックス オブジェクトのメンバー変数との間でデータが交換されます。

プロパティ シートの場合と通常のダイアログ ボックスの場合のデータ交換に関する重要な違いは、プロパティ シートには複数のページがあるということです。したがって、プロパティ シートの場合は、そのすべてのページとの間でデータを交換する必要があります。 DDX の詳細については、「ダイアログ データ エクスチェンジとダイアログ データ バリデーション」を参照してください。

ビューとプロパティ シートの 2 つのページ間でデータを交換する例は、次のとおりです。

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);
   }
}

参照

概念

プロパティ シート (MFC)