首页 > 解决方案 > MFC 对话框属性表使用在 VS 2017 中产生错误,适用于 VS 2013

问题描述

有一个现有的Visual Studio 2017MFC 对话框应用程序项目,其中控件变得过于密集和复杂,无法添加更多功能。

我想使用一个选项卡式对话框界面来分组和简化控件布局。找到了一些有用的文章,详细介绍了为 Visual Studio 2015 编写的属性页和工作表的用法。

为两个选项卡创建所需的属性页资源以启动并在我的 Aps.cpp文件中创建样式表。编译正常,但在尝试创建对话框时会产生运行时异常:

Utlities.exe 中 0x7786C54F 处未处理的异常:Microsoft C++ 异常:内存位置 0x0040F430 处的 CResourceException。

堆栈窗口对我不是很有帮助。

代码段:

CPropertySheet cSheet;
CConverter convTab; // class for first tab
CYield yieldTab;    // class for second tab
cSheet.AddPage(&convTab);
cSheet.AddPage(&yieldTab);
m_pMainWnd = &cSheet;
INT_PTR nResponse = cSheet.DoModal(); // Exception thrown here

我注意到CPropertyPage该类显然被替换CMFCPropertyPage为 asCPropertyPage在 VS 2017 中不再列为父类。

我认为它可能与CPropertySheet. 我发现使用 CMFCPropertySheet 很好,但会产生相同的错误。所以我通过并手动从 CPropertyPage 派生了我的属性页,还从 CPropertySheet 派生了工作表。同样的错误。

一时兴起,我启动了一台仍然加载了 Visual Studio 2013 的旧计算机,并通过从CPropertySheetCPropertyPages. 它工作得很好。

不知道为什么 VS 2013 有效,但 VS 2017 无效。不愿意仅仅为此将我的 2017 年安装降级到 2015 年。

有任何想法吗?

标签: c++mfcmodal-dialogvisual-studio-2017

解决方案


有同样的问题,但设法解决了。我在VS 2017。

我的主要代码:

CMFCPropertySheet sheet;
CWizardPage1 page1; // class derived from MFCPropertyPage
CWizardPage2 page2; // class derived from MFCPropertyPage

sheet.AddPage(&page1);
sheet.AddPage(&page2);

sheet.DoModal();

这会在 处引发相同的 CResourceException sheet.DoModal()

我为使其工作所做的更改是在CWizardPage1构造函数中(类似 for CWizardPage2)。

导致异常的构造函数:

CWizardPage1::CWizardPage1()
{
}

不会导致异常的构造函数:

CWizardPage1::CWizardPage1()
    : CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
}

推荐阅读