Mfc

DoDataExchangeのMFCのコントロールに変数を追加します



Add Variables Controls Mfc



DoDataExchange関数 実際、これはデータ動的バインディングテクノロジーです。たとえば、動的ボタンの作成中にボタンに変数を追加する必要がある場合、どのように変数を追加しますか?制御クラスが作成され、その変数が修正されました。新しい変数を追加するには、DoDataExchange関数を使用する必要があります。

ダイアログのコンストラクターで変数を初期化してから、次のようなDoDataExchange関数を使用して動的ボタンにバインドする必要があります。DDX_Check(pDX、IDC_CHECK1、m_Lesson1)これはm_Lesson1(これは外部変数です)です。ダイアログボックスのコンストラクタで定義されている)は、IDC_CHECK1にバインドされています。 DDX_Check関数のプロトタイプを見てください。voidAFXAPIDDX_Check(CDataExchange * pDX、int nIDC、int&value)m_Lessonが実際にはIDC_CHECK1コントロールに追加されていないことがわかります。これはint&値であり、単なる値参照であることに注意してください。同様の意味は、この変数がフレームワークによってコントロールに渡されることです。コントロールは、この変数の使用のみを担当し、この変数の上書きは担当しません。 MSDNの後に、「この関数を直接呼び出さないでください」というメッセージが続くことに注意してください。これは、UpdateDataメンバー関数によって呼び出されます。 UpdateDataを呼び出して、ダイアログボックスのコントロールを初期化するか、ダイアログボックスからデータを取得します。つまり、この関数が直接呼び出されることはなく、UpdateData関数を呼び出すときにのみ呼び出されます。 UpdateData関数 内部的にはDoDataExchangeと呼ばれます。この関数には、データが転送される方向を決定するブールパラメータが1つだけあります。 UpdateData(TRUE)を呼び出して、ダイアログのコントロールから対応するデータメンバーにデータを転送します。 UpdateData(FALSE)を呼び出して、データメンバーから対応するコントロールにデータを転送します。 UpdateData(false)は、変数の値をコントロールに渡し、ダイアログが初期化中であることを示します。 UpdateData(TRUE)は、コントロールから関連する変数への変数であり、データが取得されていることを示します。
CWnd :: DoDataExchange https://msdn.microsoft.com/zh-cn/library/x4d0y489.aspx CWnd :: DoDataExchange 時間:2016年7月

フレームワークによって交換および検証されたデータを呼び出します。



文法
 virtual void DoDataExchange( CDataExchange* pDX ) 
パラメータ
pDX

ために CDataExchange オブジェクトへのポインタ。

備考

この関数を直接呼び出さないでください。それはで構成されています UpdateData メンバー関数呼び出し。転送 UpdateData ダイアログボックスを初期化するコントロールまたはダイアログボックスでデータを取得します。



いつから CDialog アプリケーション固有のダイアログオプションクラスを導出するときに、構造の自動データ交換と検証を使用する場合は、このメンバー関数をオーバーライドする必要があります。変数の追加ウィザードは、予想されるデータマップダイアログのデータ交換(ddx)を含み、グローバル関数呼び出しを検証(DDV)するメンバー関数の書き直されたバージョンを書き込みます。

このメンバー関数の書き換えられたバージョンが自動的に生成され、ダイアログエディタは最初にダイアログリソースを作成し、次にアプリケーション固有のダイアログオプションクラスを派生させます。次に、変数の追加ウィザードを使用して、変数、データ、および検証サイズを新しいダイアログのさまざまなコントロールに関連付けます。その後、ウィザードは上書きされます DoDataExchange 、データマッピングが含まれています。以下は、変数の追加ウィザードによるDDX / DDVコードブロック生成の例です。

C ++
void CPenWidthsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX) DDX_Text(pDX, IDC_THINPENWIDTH, m_nThinWidth) DDV_MinMaxInt(pDX, m_nThinWidth, 1, 20) DDX_Text(pDX, IDC_THICKPENWIDTH, m_nThickWidth) DDV_MinMaxInt(pDX, m_nThickWidth, 1, 20) } 

DoDataExchange オーバーライドされたメンバー関数には、ソースファイルにマクロステートメントが含まれている必要があります。



ダイアログとデータ交換の検証の詳細については、を参照してください。 データフォームの表示と操作データ交換ダイアログと検証変数の追加ウィザードによって生成されるDDX_およびDDV_マクロの説明については、を参照してください。 テクニカルノート26

請求

ヘッダーの場所: afxwin.h


VCのDoDataExchange

コントロールと変数の関連付けを設定するにはどうすればよいですか?

ダイアログボックスに画像コントロールを追加する場合

1.写真をインポートする

2.画像​​コントロールをダイアログボックスにプルし、プロパティを設定し、タイプをビットマップに変更して、インポートした画像を選択します。 IDを変更する必要があります。デフォルトのIDC_Staticにすることはできません。それ以外の場合、Classwizardは表示されません。

3. ClassWizardでメンバー変数Categoryを選択し、Controlを選択して対応するCStatic変数を追加します。

4.この時点でDoDataExchangeに、対応するデータ交換ステートメントmy DDX_Control(pDX、IDC_bt、m_bt)を追加します。


void CUserDialog :: DoDataExchange(CDataExchange * pDX)
{{
CDialog :: DoDataExchange(pDX)
DDX _Text(pDX、IDC_USER_EDIT、m_username)
バット _MaxChars(pDX、m_username、10)//ユーザー名の長さを10文字で最大化します
}

DDX:ダイアログデータ交換はダイアログデータ交換を表します

DDV:ダイアログデータの有効性は、ダイアログボックスのデータの有効性を示します


つまり、この関数はMFCフレームワークを理解するのに役立ちます。コントロールの作成にも役立ちます。


UpDataData関数は内部でDoDataExchangeを呼び出します。この関数には、データが転送される方向を決定するブールパラメータが1つだけあります。 UpdateData(TRUE)を呼び出して、ダイアログのコントロールから対応するデータメンバーにデータを転送します。 UpdateData(FALSE)を呼び出して、データメンバーから対応するコントロールにデータを転送します。

UpdateData(FALSE)は、コントロールに渡される変数の値です。
UpdateData(TRUE)は、コントロールから関連する変数への値です。


DoDataExchangeは、ダイアログのデータを変更および検証するためにフレームワークによって呼び出されます。この関数では、コントロールは通常、特定の変数に関連付けられています。数量の値が他の場所で変更されると、UpdateDataを介して双方向に交換されます。 といった:

UpdateData()//コントロールの値を変数に渡します
M_variable = 'string' //コントロールの変数に値を割り当てます
UpdateData(FALSE)//変数の値をコントロールに渡します

転載:https://www.cnblogs.com/wxl845235800/p/7554580.html