使用propertyPage的MFC应用程序DialogBased,CDialog的DoModal()不打开任何Dialog

时间:2013-11-12 19:17:18

标签: c++ visual-studio-2010 winapi mfc dialog

在VS2013中,我创建了一个基于MFC应用程序的应用程序。 我修改项目是为了在应用程序的开头使用PropertyPage和Propertysheet,因此,它不是启动CDialog,而是启动我的属性页。

之后,我创建了一个Dialog,并且该类关联(来自:: CdialogEx)。 我想在按一下按钮后打开这个对话框。

点击我的按钮,我这样做:

CMyDialog myDialog;
myDialog.DoModal();

我没有任何错误消息,但是,我没有在屏幕上显示我的对话框。

也许是因为这个对话没有孩子没有?

有人可以帮我吗?

非常感谢,

致以最诚挚的问候,

Nixeus

编辑:

这是我的切入点:

#include "stdafx.h"
#include "KenoApp.h"
#include "KenoDlg.h"

#include "GenerationDlg.h"
#include "KenoSheet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CKenoApp

BEGIN_MESSAGE_MAP(CKenoApp, CWinApp)
    ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// construction CKenoApp

CKenoApp::CKenoApp()
{

}


// Seul et unique objet CKenoApp

CKenoApp theApp;


// initialisation de CKenoApp

BOOL CKenoApp::InitInstance()
{
    AfxEnableControlContainer();

    // Standard initialization

#ifdef _AFXDLL
        // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();   // Call this when linking to MFC statically
#endif

    CKenoSheet KenoSheet;
    KenoSheet.SetTitle(L"Keno Helper v1.1");

    CGenerationDlg Generation;
    CKenoDlg KenoDlg;

    KenoSheet.AddPage(&KenoDlg);
    KenoSheet.AddPage(&Generation);

    //m_pMainWnd = &KenoSheet;

    int nResponse = KenoSheet.DoModal();

    // Since the dialog has been closed, return FALSE so that we exit the
    //  application, rather than start the application's message pump.
    return FALSE;
}

之后,在我的网页上:

CAboutDlg myDialog;
theApp.m_pMainWnd = &myDialog;
myDialog.DoModal();

我现在的问题是,DoModal()关闭了我的应用程序。

2 个答案:

答案 0 :(得分:1)

快速修复:在您的应用的InitInstance()中:

CMyPropSheet pps(_T("My Property Sheet"), NULL, 0);
//m_pMainWnd = &pps;        // *** remark away this line if you have it
int nResponse = pps.DoModal();
// do response ...

CTestDlg dlg;
m_pMainWnd = &dlg;          // this line is a must have
nResponse = dlg.DoModal();
// do response ...

上面的代码假设PropertySheet和Dialog将在应用程序的InitInstance()内依次顺序启动。来自您的更多信息后,似乎不是您想要的方式,因此上述代码不适用于您的问题。在使用我的建议之前,请将您的代码还原为原始版本。

答案 1 :(得分:0)

您可以发布myDialog.DoModal();来电的结果。

您可以尝试以下代码:

无模式:

CMyDialog myDialog = new CMyDialog();

if(myDialog != NULL)
{
    BOOL ret = myDialog->Create(10000, this);
    if(!ret)
        AfxMessageBox(_T("Error creating Dialog"));

    myDialog->ShowWindow(SW_SHOW);
}
else
{
    AfxMessageBox(_T("Error Creating Dialog Object"));
}