2016-12-15 15 views
0

Dialogがあり、DoDataExchangeにはいくつかのテキストフィールドで動作するいくつかの呼び出しがあるとしましょう。 のプロトタイプを見てみましょう:C++ - DDX_Text関数では、nIDCは一意である必要がありますか?

void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, CString& value); 

私はWindowsのダイアログと、この動的なデータ交換メカニックに新たなんだと私は十分に速く答えを見つけることができます。 何かは、nIDCは一意の値でなければならないが、実際には実際のプロジェクトでは、これは常に真実ではないことがわかります。

質問があります:私たちはいつnIDCを持つことができますか?我々はすべきか、そうすべきではないか?

+5

'nIDC'はコントロールを識別するために使用されるため、ダイアログ内で一意である必要がありますが、異なるダイアログ間でグローバルに一意である必要はありません。ユニークなことはどういう意味ですか? –

+0

@ KarstenKoopあなたはちょうど私の質問に答えました:)ありがとう。 – Archont

+2

コントロールIDは、**あなたの**コードがIDで識別する必要があるコントロールに対してのみ一意でなければなりません。これは、たとえば、MFCのデータ交換インフラストラクチャに参加するコントロールの場合です。もう1つの例はボタンコントロールで、IDはWM_COMMANDメッセージの一部として渡され、ボタンが生成されます。ただし、ウィンドウハンドルによるコントロールの識別はできません。コントロールを特定することもできません(静的コントロールは後者の種類のよく知られている例で、通常は同じ 'IDC_STATIC'が割り当てられます)。 – IInspectable

答えて

0

明らかにnIDCはユニークでなければなりません。あなたは、同じ価値を持つ2つ以上のリソースを持っているという状況になることは決してありません。

私は自分でコントロール値を読み書きするのにDoDataExchangeの外でかなり頻繁にDDX_Textを使用します。コントロールから値を読み取る例:

UINT num; 
CDataExchange dx(this, TRUE); 
DDX_Text(&dx, IDC_EDIT1, num); 
関連する問題