有一个现有的Visual Studio 2017
MFC 对话框应用项目,其中的控件变得过于密集和复杂,无法添加更多功能。
我想使用选项卡式对话框界面来分组和简化控件布局。找到了一些有用的文章,详细介绍了为 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的旧计算机,并通过从CPropertySheet
和CPropertyPages
派生来尝试。它工作得很好。
不知道为什么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)
{
}