2010-01-11 4 views
3

J'ai une application de dialogue MFC créé dans Visual Studio 2008.DoModal() affirme à première ligne

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

Quand je lance l'application, DoModal() affirme à première ligne

INT_PTR CDialog::DoModal() 
{ 
    // can be constructed with a resource template or InitModalIndirect 
    ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL || 
    m_lpDialogTemplate != NULL); 
} 

Quelqu'un peut-il aider s'il vous plaît?

Répondre

1

On dirait que le modèle de ressource est manquant ou incorrectement mappé.

Regardez l'attribut IDD à votre classe CCalendarWindowDlg et voir si vous avez la boîte de dialogue appropriée présente dans la vue des ressources . Utilisez-vous les DLL satellites à des fins de localisation ou à d'autres fins?

ou la DLL de ressource du composant CCalendarWindowDlg est peut-être manquante.

+0

Merci Gopalakrishnan pour votre réponse rapide. Mais j'ai vérifié l'attribut IDD et il correspond à celui dans "resource.h" et "CalendarWindow.rc". Que puis-je faire d'autre? – user196614

+0

vous pouvez voir si CCalenderWindowDlg utilise une DLL satellite –

3

Pour résoudre ce dans le constructeur de ma classe de dialogue, je fait quelque chose comme

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

Avis J'appelle le constructeur de la classe parente CDialog avec l'ID de ressource de la forme que je veux présenter.

1

J'ai eu le même problème en créant simplement une nouvelle application MFC basée sur les dialogues à l'aide de Visual Studio 2012. Pour moi, la solution consistait à utiliser un construtor de dialogue qui prend l'identifiant de ressource de boîte de dialogue comme paramètre.

Par exemple:

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

Hope this helps.

Questions connexes