1

在 VS2013 中,我创建了一个基于对话的 MFC 应用程序。我修改了项目,以便在应用程序开始时使用 PropertyPage 和 Propertysheet,因此它不是启动 CDialog,而是启动我的 propertypage。

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

在我的按钮点击之后,我这样做:

CMyDialog myDialog;
myDialog.DoModal();

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

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

任何人都可以帮助我吗?

非常感谢,

此致,

尼克修斯

编辑 :

这是我的入口点:

#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() 关闭了我的应用程序。

4

2 回答 2

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() 内依次启动。在您提供更多信息后,似乎不是您想要的方式,因此上述代码不适用于您的问题。在使用我的建议之前,请将您的代码恢复为原始代码。

于 2013-11-18T22:46:41.910 回答
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"));
}
于 2013-11-12T19:47:46.463 回答