ダイアログ データ エクスチェンジ
DDX メカニズムを使用する場合、ダイアログ オブジェクトのメンバー変数の初期値は、通常、OnInitDialog
ハンドラーまたはダイアログのコンストラクターで設定します。 ダイアログが表示される直前に、フレームワークの DDX メカニズムによって、メンバー変数の値がダイアログ ボックスの各コントロールに転送され、DoModal
または Create
への反応としてダイアログ ボックス自体が表示されるタイミングで表示されます。 CDialog
に既定で実装されている OnInitDialog
は、CWnd
クラスの UpdateData
メンバー関数を呼び出すことで、ダイアログ ボックス内の各コントロールを初期化します。
ユーザーが [OK] ボタンをクリックしたとき (または、引数に TRUE を指定して UpdateData
メンバー関数を呼び出したとき) も、同じメカニズムでコントロールの値がメンバー変数に転送されます。 入力規則が指定されているデータ項目は、ダイアログ データ検証メカニズムによって検証されます。
次の図は、ダイアログ データが交換されるようすを示したものです。
ダイアログ データ エクスチェンジ
UpdateData
は、受け取った BOOL パラメーターの指定に応じて双方向で機能します。 データ交換を実行するために、UpdateData
は CDataExchange
オブジェクトをセットアップし、独自のダイアログ クラスのオーバーライド、つまり CDialog
のメンバー関数 DoDataExchange
のオーバーライドを呼び出します。 DoDataExchange
は CDataExchange
型の引数を受け取ります。 UpdateData
に渡される CDataExchange
オブジェクトは交換のコンテキストを表し、交換の方向などの情報を定義します。
開発者 (またはコード ウィザード) は、DoDataExchange
をオーバーライドするときに、各データ メンバー (コントロール) につき 1 つの DDX 関数の呼び出しを指定します。 それぞれの DDX 関数は、UpdateData
によって DoDataExchange
に渡された CDataExchange
引数で指定されたコンテキストに基づいて、データを双方向で交換する方法を認識します。
MFC には、各種のデータ交換に対応したさまざまな DDX 関数が用意されています。 次に示したのは、DoDataExchange
のオーバーライドの例です。オーバーライドの中で、2 つの DDX 関数と 1 つの DDV 関数が呼び出されています。
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
メンバー関数によってダイアログ ボックスが終了され、DoModal
から値 IDCANCEL が返されます。 その場合、ダイアログ ボックスとダイアログ オブジェクトとの間のデータ交換は実行されません。
関連項目
ダイアログ データ エクスチェンジとダイアログ データ検証
MFC でのダイアログ ボックスの操作
ダイアログ データ検証