次の方法で共有


ダイアログ データ エクスチェンジ

更新 : 2007 年 11 月

ダイアログ データ エクスチェンジ (DDX: Dialog Data Exchange) 機構を使用する場合は、ダイアログ オブジェクトのメンバ変数の初期値を設定します。通常、OnInitDialog ハンドラまたはダイアログ コンストラクタで行います。ダイアログ ボックスが表示される直前に、フレームワークの DDX 機構によって、メンバ変数の値がダイアログ ボックスのコントロールに転送されます。転送された値は、DoModal または Create に応答してダイアログ ボックスが表示されたときに、それらのコントロールで表示されます。CDialogOnInitDialog の既定の実装は、CWnd クラスの UpdateData メンバ関数を呼び出して、ダイアログ ボックスのコントロールを初期化します。

この機構では、[OK] ボタンがクリックされたとき、または引数を TRUE にして UpdateData メンバ関数が呼び出されたときに、コントロールからメンバ変数に値が転送されます。ダイアログ データ バリデーション (DDV: Dialog Data Validation) 機構では、入力規則が指定されているデータ項目の妥当性がチェックされます。

ダイアログ データ エクスチェンジの機能を次の図に示します。

ダイアログ データ エクスチェンジ
ダイアログ データ エクスチェンジ

UpdateData は、渡された BOOL パラメータによって指定されたとおりに双方向で機能します。データ交換を実行するために、UpdateData では CDataExchange オブジェクトをセットアップし、ダイアログ クラスでオーバーライドされた CDialogDoDataExchange メンバ関数を呼び出します。DoDataExchange は、CDataExchange 型の引数を使用します。UpdateData に渡される CDataExchange オブジェクトは、交換の方向などの情報を定義して交換のコンテキストを表します。

DoDataExchange をオーバーライドすると、データ メンバ (コントロール) ごとに 1 つの DDX 関数の呼び出しを指定できます。各 DDX 関数では、UpdateData によって DoDataExchange に渡された CDataExchange 引数のコンテキストに基づいて、双方向でデータを交換する方法があります。

MFC では、種類の異なるデータ交換のために、多くの DDX 関数が用意されています。2 つの DDX 関数と 1 つの DDV 関数が呼び出される DoDataExchange のオーバーライドの例は、次のとおりです。

void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
   DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
   DDV_MaxChars(pDX, m_strName, 20);
}

DDX_ 行と DDV_ 行はデータ マップです。例で示されているサンプルの DDX 関数と DDV 関数は、チェック ボックス コントロールとエディット ボックス コントロールを対象としています。

ユーザーがモーダル ダイアログ ボックスをキャンセルする場合、OnCancel メンバ関数はダイアログ ボックスを終了し、DoModalIDCANCEL 値を返します。その場合、ダイアログ ボックスとダイアログ オブジェクトの間でデータは交換されません。

参照

概念

ダイアログ データ エクスチェンジとダイアログ データ バリデーション

ダイアログ ボックスの有効期間

ダイアログ データ バリデーション