Я добавил поле со списком в свое диалоговое окно 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
}
Играя с этим немного больше, я могу видеть, что я могу заполнить контроль перед вызовом CDialog::OnInitDialog()
, если я использую GetDlgItem()
вместо моей управляющей переменной (который еще не был инициализирован), а затем пункт по умолчанию будет правильно быть установленным, как я хочу. Но разве среда MFC не предусматривает заполнение элементов управления списком в диалоговом окне и по-прежнему с использованием DoDataExchange()
?
Отправьте свой код. Вы должны иметь возможность заполнять 'CComboBox', используя' AddString() 'просто отлично после' OnInitDialog() '. Нет ничего плохого в механизме DoDataExachange и в структуре MFC в целом. –
Я использовал это в течение многих лет и не имел ни одной из ваших проблем. Я никогда не называю 'DoDataExchange' напрямую; в функции, которую вы заполняете комбо, вы должны вызывать 'UpdateData (FALSE)' после. – sergiol
@sergiol: Я никогда не называл 'DoDataExchange()' напрямую. Но я могу видеть в 'OnInitDialog()' где 'CDialog :: OnInitDialog()' (где 'DoDataExchange()') вызывается. И я могу заполнить контроль до или после этого. И я заполняю его в 'OnInitDialog()'. Где вы его заполняете? –