0

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

4

2 回答 2

2

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

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

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

于 2011-01-12T01:29:28.420 回答
0

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

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

于 2011-01-11T16:24:02.520 回答