Диалог, полученный из 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;
};
Спасибо за любую возможную помощь в этом.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: Я понял, что проблема возникает из-за выпадающего списка. Я не уверен почему. Я заменил его на ListBox, и я не получаю проблем.
2 ответа
Я подозреваю, что что-то идет не так в вашем OnInitDialog ().
Я предлагаю вам пойти на этапы отладки:
а) удалить InitCommonControls () в OnInitDialog ()
б) удалить FillInCombo () в OnInitDialog ()
c) удалить InitCommonControls () и FillInCombo () в OnInitDialog ()
После удаления по одному, проверьте с помощью возвращаемого значения DoModal.
Я думаю ты делаешь InitCommonControls()
в неправильном месте. Это должно быть сделано один раз в вашей программе. Он инициализирует библиотеку общих элементов управления. Не элементы управления в вашем диалоге.
Обычно я включаю это в процедуру запуска приложения, прежде чем открывать какие-либо окна.