我试图将具有三个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更改数据库选项,其他两个选项卡将执行其他操作。我的意图是使对话框/属性表看起来与现在相同,但保持打开状态而不是关闭状态。

最佳答案

您的问题在于尝试在基于对话框的应用程序中构造属性表。实际上,您选择在InitInstance中执行所有操作有时可能会出现问题。

对于初学者,不需要在堆上创建所有对象(即,使用“ new”)。但是,如果那是您想要的,那就好。至于您的表格仅显示片刻的原始问题,InitInstance设计为在没有其他说明的情况下立即返回。因此,您将看到一个实例的工作表。这是由于MFC期望指向CWinApp类派生的成员变量的有效指针称为“ m_pMainWnd”(实际上是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如何启动应用程序以及预期的内容。

关于c++ - CPropertySheet仅显示一秒钟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29034636/

10-09 13:16