从CDialog派生的Dialog在DoModal之后返回-1(MFC / C ++)

时间:2011-01-11 15:09:49

标签: c++ mfc cdialog

我创建了一个从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替换它,我没有遇到麻烦。

2 个答案:

答案 0 :(得分:2)

我怀疑OnInitDialog()中出现了一些问题。

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

逐个删除后,请检查DoModal返回值。

答案 1 :(得分:0)

认为你在错误的地方做InitCommonControls()。这应该在你的程序中完成一次。它初始化公共控件库。不是对话框本身的控件。

在将任何窗口启动之前,我通常将其放在应用程序的启动程序中。