DoModal () утверждает в самой первой строке - PullRequest
3 голосов
/ 11 января 2010

У меня есть приложение на основе диалогового окна MFC, созданное в Visual Studio 2008.

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);
}

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Для решения этой проблемы в конструкторе моего класса Dialog я сделал что-то вроде

CCalendarWindowDlg::CCalendarWindowDlg ()
    :CDialog(IDD)
{
}

Обратите внимание, что я вызываю конструктор родительского класса CDialog с идентификатором ресурса формы, которую я хочу представить.

1 голос
/ 28 ноября 2013

У меня была такая же проблема, когда я просто создавал новое приложение MFC на основе диалога с помощью Visual Studio 2012. Для меня было решение использовать диалоговую конструктор, который принимает идентификатор ресурса диалога в качестве параметра.

Например:

CCalendarWindowDlg dlg(IDD_MYDIALOG);
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();

Надеюсь, это поможет.

1 голос
/ 11 января 2010

Похоже, что шаблон ресурса отсутствует или отображается неправильно.

Посмотрите на атрибут IDD вашего класса CCalendarWindowDlg и посмотрите, имеется ли соответствующий диалог в представлении Resource View .

Используете ли вы спутниковые библиотеки DLL для локализации или для других целей? или может отсутствовать DLL-библиотека ресурса компонента CCalendarWindowDlg.

...