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