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()
を使用していますか?
コードを投稿してください。 'OnInitDialog()'の後に 'AddString()'を使って 'CComboBox'を読み込むことができます。 'DoDataExachange'メカニズムとMFCフレームワークには一般的に間違ったものはありません。 –
私はこれを何年も使ってきたが、あなたの問題はなかった。 DoDataExchangeを直接呼び出すことはありません。この関数では、コンボをポピュレートしています。後で 'UpdateData(FALSE)'を呼ぶべきです。 – sergiol
@sergiol: 'DoDataExchange()'を直接呼び出したことはありません。しかし、 'OnInitDialog()'では 'CDialog :: OnInitDialog()'( 'DoDataExchange()')が呼び出されています。その前後にコントロールを設定することができます。そして私はそれを 'OnInitDialog()'に入れています。あなたはどこにそれを設定しますか? –