次の方法で共有


ダイアログ データ交換

DDX メカニズムを使用する場合は、ダイアログ オブジェクトのメンバー変数の初期値を設定します。通常は、 OnInitDialog ハンドラーまたはダイアログ コンストラクターで設定します。 ダイアログが表示される直前に、フレームワークの DDX メカニズムは、メンバー変数の値をダイアログ ボックス内のコントロールに転送します。このコントロールは、ダイアログ ボックス自体が DoModal または Createに応答して表示されるときに表示されます。 OnInitDialogCDialogの既定の実装では、クラス UpdateDataCWnd メンバー関数を呼び出して、ダイアログ ボックスのコントロールを初期化します。

同じメカニズムは、ユーザーが [OK] ボタンをクリックしたとき (または引数 UpdateData を指定してメンバー関数を呼び出すたびに) コントロールからメンバー変数に値を転送します。 ダイアログ データ検証メカニズムは、検証規則を指定したデータ項目を検証します。

次の図は、ダイアログ データ交換を示しています。

データ モデルと画面上のダイアログ ボックスのデータ交換の図。
ダイアログ データ交換

UpdateData は、渡された BOOL パラメーターで指定された双方向で動作します。 交換を実行するには、UpdateDataCDataExchange オブジェクトを設定し、ダイアログ クラスのCDialogDoDataExchange メンバー関数のオーバーライドを呼び出します。 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 メンバー関数はダイアログ ボックスを終了し、 DoModalIDCANCEL を返します。 その場合、ダイアログ ボックスとダイアログ オブジェクトの間でデータは交換されません。

こちらも参照ください

ダイアログ データ交換と検証
MFC でのダイアログ ボックスの操作
ダイアログ データの検証