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取代了,因为CPropertyPage在VS 2017中不再列为父类。

我认为它可能与CPropertySheet不兼容.我发现使用CMFCPropertySheet符合要求,但会产生相同的错误。因此,我浏览并手动从CPropertyPage派生了我的属性页面,也从CPropertySheet派生了工作表。同样的错误。

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

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

有什么想法吗?

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

我的主要代码:

CMFCPropertySheet sheet;
CWizardPage1 page1; // class derived from MFCPropertyPage
CWizardPage2 page2; // class derived from MFCPropertyPage
sheet.AddPage(&page1);
sheet.AddPage(&page2);
sheet.DoModal();

这会在sheet.DoModal()处抛出相同的 CResourceException。

我为使其工作而更改的内容是在CWizardPage1构造函数中(以及类似的CWizardPage2(。

导致异常的构造函数:

CWizardPage1::CWizardPage1()
{
}

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

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

相关内容

  • 没有找到相关文章

最新更新