Диалог, полученный из CDialog, возвращает -1 после Domodal (MFC/C ++)
Вопрос
Я создал диалог, который он получен из Cdialog (MFC делает это автоматически), но мне пришлось переопределить OnInitDialog
Метод для инициализации ComboBox:
BOOL CLogin::OnInitDialog()
{
CDialog::OnInitDialog();
InitCommonControls();
if ( FillInCombo() != 0 )
//erro ao tentar ler leitoras
return TRUE;
return TRUE;
}
Метод FillInCombo
Вызывает класс PCSC, чтобы заполнить эту комбинацию всеми доступными считывателями смарт -карт.
Однако в то время как отладка имеет место странное поведение. При попытке выбрать элемент в комбо, он автоматически закрывается (он фактически генерирует событие Onclose) и Domodal возвращает -1.
Затем, затем, приложение больше никогда не загружается правильно, если я не очищаю решения и снова его не строю.
CLogin SmartNetData;
int ret = SmartNetData.DoModal();
switch ( ret )
{
case IDOK:
break;
case -1:
// strange error
OnOK();
return TRUE;
case IDABORT:
case IDCANCEL:
OnOK();
return TRUE;
};
Спасибо за возможную помощь по этому поводу.
Позже редактировать: я понял, что проблема возникает из -за Combobox. Я не уверен, почему. Я заменил его на Listbox, и у меня нет проблем.
Решение
Я подозреваю, что что -то идет не так в вашем oninitdialog ().
Я предлагаю вам пойти на шаги отладки:
а) Удалить initCommonControls () в oninitdialog ()
б) Снимите FillinCombo () в onInitDialog ()
c) Удалить initCommonControls () и Fillincombo () in oninitdialog ()
После удаления одного за другим проверяйте со значением возврата Domodal.
Другие советы
я считать ты делаешь InitCommonControls()
в том месте. Это должно быть сделано один раз в вашей программе. Он инициализирует библиотеку общих элементов управления. Не элементы управления на вашем диалоге сами.
Обычно я помещаю это в подпрограмму запуска приложения, прежде чем поднять какие -либо окна.