2016-12-10 25 views
0

MFCダイアログボックスにコンボボックスを追加しました。そして、制御変数m_wndImportMode)と値変数m_nImportMode)の両方を追加しました。MFCダイアログボックスにコンボボックスを挿入する

私は両方の変数をうまく使用することができます。そして、私はコントロール変数を使用して、コントロールをうまく読み込むことができます。私の問題は、私のコントロールを取り込むための正しい場所はどこですか?

DoDataExchange()の前にコンボボックスを入力すると、コントロール変数がまだ初期化されていません。 DoDataExchange()の後にコンボボックスを設定すると、値は正しく設定されますが、値は設定されません。このもう少しで遊ぶ

BOOL COptionsDlg::OnInitDialog() 
{ 
    // If I populate my combo box here, 
    // my control variable is not yet available 

    // This will ultimately call DoDataExchange() 
    CDialog::OnInitDialog(); 

    // If I populate my combo box here, 
    // DoDataExchange() has already been called and 
    // so it will not have selected the correct item 
    // before there were any items 

    return TRUE; // return TRUE unless you set the focus to a control 
} 

、私は私が私の制御変数の代わりにGetDlgItem()を使用する場合(まだ初期化されていない)CDialog::OnInitDialog()を呼び出す前に、コントロールを作成することができます見ることができ、その後、デフォルトの項目が正しくなります私が望むように設定してください。しかし、MFCフレームワークはダイアログボックスにリストコントロールを設定するのではなく、はまだを使用してDoDataExchange()を使用していますか?

+0

コードを投稿してください。 'OnInitDialog()'の後に 'AddString()'を使って 'CComboBox'を読み込むことができます。 'DoDataExachange'メカニズムとMFCフレームワークには一般的に間違ったものはありません。 –

+0

私はこれを何年も使ってきたが、あなたの問題はなかった。 DoDataExchangeを直接呼び出すことはありません。この関数では、コンボをポピュレートしています。後で 'UpdateData(FALSE)'を呼ぶべきです。 – sergiol

+0

@sergiol: 'DoDataExchange()'を直接呼び出したことはありません。しかし、 'OnInitDialog()'では 'CDialog :: OnInitDialog()'( 'DoDataExchange()')が呼び出されています。その前後にコントロールを設定することができます。そして私はそれを 'OnInitDialog()'に入れています。あなたはどこにそれを設定しますか? –

答えて

0

GetDlgItem()を使用してこの問題を解決し、コンボボックスを取得してからCDialog::OnInitDialog()が呼び出される前に入力しました。これは意図したとおりに動作します。

これが他の人にとって問題でない場合は、私がどうやって何をしているのか分かりません。

+1

はい、それは 'CDialog :: OnInitDialog'が' UpdateData(FALSE) 'を呼び出すので動作します。しかし、私は 'CDialog :: OnInitDialog'の前にコードを書いてはいけません。 'CDialog :: OnInitDialog'の後ろにすべてを置き、' UpdateData(FALSE) 'を最後に呼び出します。また、 'GetDlgItem'の代わりに' m_combo.SubclassDlgItem(IDC_COMBO1、this) 'を使用するか、' DDX_Control(pDX、IDC_COMBO1、m_combo) 'を追加します –

+0

しかし、私はUpdateData() 。コードは正常に動作しますが、私はMFCのやり方を期待していましたが、効率的にコントロールを実装できるようになりました。 –

関連する問題