Диалог, полученный из CDialog, возвращает -1 после Domodal (MFC/C ++)

StackOverflow https://stackoverflow.com/questions/4659062

  •  09-10-2019
  •  | 
  •  

Вопрос

Я создал диалог, который он получен из 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() в том месте. Это должно быть сделано один раз в вашей программе. Он инициализирует библиотеку общих элементов управления. Не элементы управления на вашем диалоге сами.

Обычно я помещаю это в подпрограмму запуска приложения, прежде чем поднять какие -либо окна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top