我正在尝试将包含三个CPropertyPages的CPropertySheet添加到我的MFC应用程序中。我的问题是,属性表只显示不到一秒钟然后关闭。当我在创建CPropertySheet后打开另一个模式对话框时,CPropertySheet保持打开状态,我可以毫无问题地使用它。这是我的代码:
BOOL CSLIMOptCplusplusApp::InitInstance()
{
CWinApp::InitInstance();
SQLHENV m_1;
EnvGetHandle(m_1);
Login lgn;
lgn.DoModal();
CImageSheet* imagedlg = new CImageSheet("Image Capture Dialog" );
CImageDisplay* pageImageDisplay = new CImageDisplay;
CImageDimensions* pageImageDimensions = new CImageDimensions;
ListOption* pageListOption = new ListOption;
ASSERT( imagedlg );
ASSERT( pageImageDisplay );
ASSERT( pageImageDimensions );
ASSERT( pageListOption );
imagedlg->AddPage( pageListOption);
imagedlg->AddPage( pageImageDimensions );
imagedlg->AddPage( pageImageDisplay );
imagedlg->Create( NULL,
-1,
WS_EX_CONTROLPARENT | WS_EX_TOOLWINDOW );
imagedlg->ShowWindow( SW_SHOW );
我认为当我使用imagedlg->Create(
作为第一个参数时,我的问题可能在NULL
。我关注的教程使用this
代替NULL
。但是,这会产生错误:
IntelliSense:“CSLIMOptCplusplusApp *”类型的参数与“CWnd *”类型的参数不兼容
我也试过了imagedlg->Create();
,它也只是闪过一会儿。
我希望我的CPropertySheet在关闭之前保持打开状态。谢谢你的帮助!
修改 这是我希望我的财产表看起来像什么的图像。我的第一个选项卡使用ListControl来更改数据库选项,另外两个选项卡将执行其他操作。我的目的是让对话框/属性表看起来和现在一样,但要保持开放而不是关闭。
答案 0 :(得分:1)
您的问题在于尝试在基于对话框的应用程序中构建属性表。实际上,您在InitInstance中执行所有操作的选择有时会有问题。
对于初学者来说,没有必要在堆上创建所有对象(即使用'new')。但是,如果这就是你想要的,那好吧。至于您原来只能显示片材的问题,如果没有另行说明,InitInstance会立即返回。因此,您可以看到实例的工作表。这是因为MFC期望一个名为' m_pMainWnd '的CWinApp类派生成员变量的有效指针(实际上,CWinThread :: m_pMainWnd)。如果要从InitInstance中启动属性表或主对话框,则需要将该变量设置为有效窗口。这是我写的一个快速示例:
CPropertySheet* m_pdlgPropertySheet = new CPropertySheet(_T("Simple PropertySheet"));
ASSERT(m_pdlgPropertySheet);
// Add three pages to the CPropertySheet object. Both m_pstylePage,
// m_pcolorPage, and m_pshapePage are data members of type
// CPropertyPage-derived classes in CView-derived class.
Page1* m_pstylePage = new Page1;
m_pstylePage->Construct(IDD_DIALOG1);
Page2* m_pcolorPage = new Page2;
m_pcolorPage->Construct(IDD_DIALOG2);
m_pdlgPropertySheet->AddPage(m_pstylePage);
m_pdlgPropertySheet->AddPage(m_pcolorPage);
m_pMainWnd = m_pdlgPropertySheet;
INT_PTR nResponse = m_pdlgPropertySheet->DoModal();
注意DoModal上方的行。如果您需要其他信息,请查看Creating a full application using the CPropertySheet。最后,您可能想要了解MFC如何启动应用程序以及预期的内容。