ダイアログ データ エクスチェンジ
DDX の機能を使用すると、 OnInitDialog ハンドラーまたはダイアログ コンストラクターのダイアログ オブジェクトのメンバー変数の初期値は、通常設定します。ダイアログを表示する直前に、フレームワークの DDX の機能は、ダイアログ ボックスのコントロールにダイアログ ボックス自体が DoModal か 生成(&&C),create,作成,生成に応じて表示とメンバー変数の値をコピーします。CDialog の OnInitDialog の既定の実装は、ダイアログ ボックスのコントロールを初期化するためにクラス CWnd の UpdateData のメンバー関数をダイヤルします。
同じ機能がコントロールからメンバー変数にときにユーザーが [OK] をクリックする値をコピーします (または引数 TRUEとの UpdateData のメンバー関数をダイヤルするたびに)。ダイアログ データの有効性検査機能は、検証規則を指定するデータ項目を検証します。
次の図は、ダイアログ データ エクスチェンジについて説明します。
ダイアログ データ エクスチェンジ
UpdateData は、渡された BOOL パラメーターで指定されている、いずれの方向でも機能します。交換を実行するには、 UpdateData は CDataExchange のオブジェクトを設定し、ダイアログ クラスの entity_CODECDialog の DoDataExchange のメンバー関数のオーバーライドをダイヤルします。DoDataExchange は引数の型 CDataExchangeを受け取ります。UpdateData に渡される CDataExchange のオブジェクトが交換の方向などの情報を定義する交換のコンテキストを表します。
は、またはコード ウィザード) DoDataExchangeをオーバーライドすると、データ メンバー (コントロール)、 1 人の 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 関数は、 CheckBox コントロールおよびエディット ボックス コントロールでは、各です。
ユーザーがモーダル ダイアログ ボックスをキャンセルし、 OnCancel のメンバー関数は、ダイアログ ボックスを閉じ、 DoModal は IDCancel値を返します。その場合、データはダイアログ ボックスとダイアログ オブジェクトの間で交換されません。