有一个现有的Visual Studio 2017 MFC对话框应用程序项目,其中的控件变得过于密集和复杂,无法添加更多功能。
我想使用一个选项卡式对话框接口对控件布局进行分组和简化。找到一些有用的文章,详细介绍为Visual 2015编写的属性页和工作表的使用情况。
为启动两个选项卡创建所需的属性页资源,并在我的.cpp文件中创建样式表。编译良好,但在尝试创建对话框时生成运行时异常:
Utlities.exe中0x7786C54F处的未处理异常: 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所取代,因为在VS 2017中,CPropertyPage不再被列为父类。
我认为它可能与CPropertySheet不兼容。我发现使用CMFCPropertySheet很好,但也会产生同样的错误。因此,我从CPropertyPage手工导出了我的属性页,也从CPropertySheet派生了工作表。同样的错误。
一时兴起,我点燃了一台更老的计算机,它还装载了Visual 2013,并通过从CPropertySheet和CPropertyPages派生的方法进行了尝试。效果很好。
不知道VS 2013有什么用,但是VS 2017没有用。我不愿意仅仅因为这个把我2017年的安装降级到2015年。
有什么想法吗?
发布于 2020-02-11 11:37:33
有同样的问题,但设法解决了它。我现在在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构造函数(与CWizardPage2类似)。
构造函数,该构造函数导致异常:
CWizardPage1::CWizardPage1()
{
}构造函数,它不会导致异常:
CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
}https://stackoverflow.com/questions/50558880
复制相似问题