我在Visual Studio 2008中创建了一个基于MFC对话框的应用程序。
CCalendarWindowDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
当我运行应用程序时,DoModal()在第一行断言
INT_PTR CDialog::DoModal()
{
// can be constructed with a resource template or InitModalIndirect
ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
m_lpDialogTemplate != NULL);
}
有人可以帮忙吗?
答案 0 :(得分:3)
为了在我的Dialog类的构造函数中解决这个问题,我做了类似
的操作CCalendarWindowDlg::CCalendarWindowDlg ()
:CDialog(IDD)
{
}
注意我正在使用我想要呈现的表单的资源ID调用CDialog父类的构造函数。
答案 1 :(得分:1)
似乎资源模板丢失或映射错误。
查看 CCalendarWindowDlg 类中的 IDD 属性,看看资源视图中是否有相应的对话框。
您是使用附属DLL进行本地化还是其他目的?或者CCalendarWindowDlg组件资源DLL可能丢失。
答案 2 :(得分:1)
我在使用Visual Studio 2012创建基于MFC的新应用程序时遇到了同样的问题。对我来说,解决方案是使用对话框construtor,它将对话框资源ID作为参数。
例如:
CCalendarWindowDlg dlg(IDD_MYDIALOG);
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
希望这有帮助。