CPropertySheet 只显示一秒钟
CPropertySheet only shows for a second
我正在尝试将包含三个 C属性Pages 的 C属性Sheet 添加到我的 MFC 应用程序。我的问题是 属性 sheet 只显示不到一秒钟然后关闭。当我在创建 C属性Sheet 后打开不同的模式对话框时,C属性Sheet 保持打开状态,我可以毫无问题地使用它。这是我的代码:
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();
,也是只闪一下。
我希望我的 C属性Sheet 在关闭之前保持打开状态。感谢您的帮助!
编辑:
这是我希望我的 属性 sheet 看起来像的图像。我的第一个选项卡使用 ListControl 来更改数据库选项,其他两个选项卡将执行其他操作。我的意图是让 dialog/propertysheet 看起来和现在一样,但保持打开而不是关闭。
您的问题在于尝试在基于对话框的应用程序中构建 属性 sheet。实际上,您选择在 InitInstance 中执行所有内容有时会出现问题。
对于初学者来说,没有必要在堆上创建所有对象(即使用 'new')。但是,如果那是你想要的,好吧。至于您的 sheet 仅显示片刻的原始问题, InitInstance 被设计为 return 如果没有其他说明,则立即显示。因此,您会看到一个实例的 sheet。这是由于 MFC 需要一个指向 CWinApp class 派生成员变量的有效指针,该变量称为“m_pMainWnd”(实际上是 CWinThread::m_pMainWnd)。如果您想从 InitInstance 中启动 属性 sheet,或者主对话框,您需要将该变量设置为有效的 window。这是我写的一个快速示例:
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属性Pages 的 C属性Sheet 添加到我的 MFC 应用程序。我的问题是 属性 sheet 只显示不到一秒钟然后关闭。当我在创建 C属性Sheet 后打开不同的模式对话框时,C属性Sheet 保持打开状态,我可以毫无问题地使用它。这是我的代码:
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();
,也是只闪一下。
我希望我的 C属性Sheet 在关闭之前保持打开状态。感谢您的帮助!
编辑:
这是我希望我的 属性 sheet 看起来像的图像。我的第一个选项卡使用 ListControl 来更改数据库选项,其他两个选项卡将执行其他操作。我的意图是让 dialog/propertysheet 看起来和现在一样,但保持打开而不是关闭。
您的问题在于尝试在基于对话框的应用程序中构建 属性 sheet。实际上,您选择在 InitInstance 中执行所有内容有时会出现问题。
对于初学者来说,没有必要在堆上创建所有对象(即使用 'new')。但是,如果那是你想要的,好吧。至于您的 sheet 仅显示片刻的原始问题, InitInstance 被设计为 return 如果没有其他说明,则立即显示。因此,您会看到一个实例的 sheet。这是由于 MFC 需要一个指向 CWinApp class 派生成员变量的有效指针,该变量称为“m_pMainWnd”(实际上是 CWinThread::m_pMainWnd)。如果您想从 InitInstance 中启动 属性 sheet,或者主对话框,您需要将该变量设置为有效的 window。这是我写的一个快速示例:
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 如何启动应用程序以及预期的内容。