我创建了一个从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替换它,我没有遇到麻烦。
答案 0 :(得分:2)
我怀疑OnInitDialog()中出现了一些问题。
我建议你去调试步骤:
a)删除OnInitDialog()中的InitCommonControls()
b)删除OnInitDialog()中的FillInCombo()
c)删除OnInitDialog()中的InitCommonControls()和FillInCombo()
逐个删除后,请检查DoModal返回值。
答案 1 :(得分:0)
我认为你在错误的地方做InitCommonControls()
。这应该在你的程序中完成一次。它初始化公共控件库。不是对话框本身的控件。
在将任何窗口启动之前,我通常将其放在应用程序的启动程序中。