c++ - CPropertySheet 只显示一秒钟

标签 c++ mfc propertysheet cpropertysheet

我正在尝试将具有三个 CPropertyPage 的 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 );

当我使用 NULL 作为第一个参数时,我认为我的问题可能出在 imagedlg->Create( 处。我正在学习的教程使用了 this 代替 NULL。但是,这给出了错误:

IntelliSense: argument of type "CSLIMOptCplusplusApp *" is incompatible with parameter of type "CWnd *"

我也尝试了 imagedlg->Create(); 并且它也只闪烁了片刻。 我希望我的 CPropertySheet 在关闭之前保持打开状态。感谢您的帮助!

编辑: 这是我希望我的属性表看起来像的图像。我的第一个选项卡使用 ListControl 来更改数据库选项,其他两个选项卡将执行其他操作。我的目的是让对话框/属性表看起来和现在一样,但保持打开而不是关闭。 CPropertySheet

最佳答案

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

对于初学者来说,没有必要在堆上创建所有对象(即使用“new”)。但是,如果那是你想要的,好吧。至于你最初的工作表问题只显示了一会儿, InitInstance 被设计为如果没有被告知会立即返回。因此,您会看到一个实例的工作表。这是由于 MFC 需要一个指向名为“m_pMainWnd”(实际上是 CWinThread::m_pMainWnd)的 CWinApp 类派生成员变量的有效指针。如果您想从 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/

相关文章:

c++ - 如何将 SetFocus 设置为 CButton 以便边框和焦点虚线可见?

c++ - 添加多个 Visual Studio 属性表 (.props) 的 %PATH%

c++ - sigaction 结构和函数

c++ - 用户可以引用演绎指南的演绎类型吗?

c++ - Libquantum 代码理解 Makefile

c++ - 在与 PHP 的 openssl 库兼容的 C++ 中签署数据

c++ - CListCtrl Customdraw 函数中的禁用或灰色行

c++ - SetWindowPos 对工具提示没有影响

visual-studio-2010 - Visual Studio 属性表保存在哪里?

visual-c++ - 使用CMake添加Visual C++属性表