我创建了一个从CDialog派生的Dialog(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代替了它,但没有遇到麻烦。

最佳答案

我怀疑您的OnInitDialog()中出了点问题。

我建议您去调试步骤:
a)在OnInitDialog()中删除InitCommonControls()
b)在OnInitDialog()中删除FillInCombo()
c)在OnInitDialog()中删除InitCommonControls()和FillInCombo()

一一删除后,检查DoModal返回值。

关于c++ - 从CDialog派生的Dialog在DoModal(MFC/C++)之后返回-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4659062/

10-11 19:11