在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()关闭了我的应用程序。
答案 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"));
}