当CDialog.DoModal()函数无法创建对话框?

Car*_*ary 6 c++ windows mfc visual-c++

MSDN说,对于CDialog.DoModal()函数,如果函数无法创建对话框,则返回值为-1.它没有说明在哪种情况下它可能无法创建对话框.

对MFC源代码的快速调查显示,如果(LPCDLGTEMPLATE)LockResource(hDialogTemplate)返回NULL,则DoModal函数可以返回-1.

由于我的问题无法在压力测试中稳定复制,我无法调试程序以找到根本原因.这里有人遇到过类似的问题吗?

Fré*_*idi 5

DoModal()依赖于CreateDialogIndirect() API函数.其堂兄DialogBox()的文档声明在以下情况下函数可能会失败:

  • 无效的参数值,
  • 系统类是由不同的模块注册的,
  • WH_CBT钩安装并返回失败代码,
  • 对话框模板中的一个控件未注册,或其窗口过程失败WM_CREATEWM_NCCREATE.

我个人从未遇到过前三个原因,但是我被第四个原因咬了一次因为我的对话框包含一个未在机器上注册的ActiveX控件.也许你遇到了同样的问题.