MFC Dialog Property Sheet usage produces errors in VS 2017, works on VS 2013
具有一个现有的Visual Studio 2017 MFC对话框应用程序项目,其中的控件变得过于密集和复杂,无法添加更多功能。
我想使用一个选项卡式对话框界面来分组和简化控件布局。找到了一些有用的文章,详细介绍了为Visual Studio 2015编写的属性页和属性表的用法。
为两个选项卡创建了所需的属性页资源,并在我的Aps的.cpp文件中创建了样式表。可以很好地编译,但是在尝试创建对话框时会生成运行时异常:
Unhandled exception at 0x7786C54F in Utlities.exe: Microsoft C++
exception: CResourceException at memory location 0x0040F430.
堆栈窗口对我不是很有帮助。
代码段:
1 2 3 4 5 6 7
| 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.
有什么想法吗?
- 在调试模式下进行摩擦会发生什么?还是当机?而且,如果您删除其中一个标签,会发生什么?看看是否可以隔离哪个标签是令人讨厌的标签。
-
根据此处的docs.microsoft.com/en-gb/cpp/mfc/reference/…,这意味着找不到资源。您是否进行了完整的整修?您的页面之一可能正在使用的资源现在在以前的较新IDE中具有不同的路径吗?
-
在显示任何窗口之前,无论是否安装调试器,它都会崩溃。完全重建无济于事。使用添加->新建->资源->对话框/ IDD_PropPage_Large创建的PropertyPage。页面的类是从资源视图中使用ClassWizard创建的。完整的应用程序是在VS 2017上创建的,不是从以前的版本导入的。我在旧计算机上安装了VS 2015,并重新创建了裸露的骨骼
-
遇到了同样的问题,但设法解决了。我在VS 2017中。
我的主要代码:
1 2 3 4 5 6 7 8
| 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相似)。
导致异常的构造函数:
1 2 3
| CWizardPage1::CWizardPage1()
{
} |
不会导致异常的构造函数:
1 2 3 4
| CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
} |
-
遇到了同样的问题,但设法解决了。我在VS 2017中。
我的主要代码:
1 2 3 4 5 6 7 8
| 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相似)。
导致异常的构造函数:
1 2 3
| CWizardPage1::CWizardPage1()
{
} |
不会导致异常的构造函数:
1 2 3 4
| CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
} |
-
遇到了同样的问题,但设法解决了。我在VS 2017中。
我的主要代码:
1 2 3 4 5 6 7 8
| 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相似)。
导致异常的构造函数:
1 2 3
| CWizardPage1::CWizardPage1()
{
} |
不会导致异常的构造函数:
1 2 3 4
| CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
} |
-
遇到了同样的问题,但设法解决了。我在VS 2017中。
我的主要代码:
1 2 3 4 5 6 7 8
| 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相似)。
导致异常的构造函数:
1 2 3
| CWizardPage1::CWizardPage1()
{
} |
不会导致异常的构造函数:
1 2 3 4
| CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
} |
-
遇到了同样的问题,但设法解决了。我在VS 2017中。
我的主要代码:
1 2 3 4 5 6 7 8
| 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相似)。
导致异常的构造函数:
1 2 3
| CWizardPage1::CWizardPage1()
{
} |
不会导致异常的构造函数:
1 2 3 4
| CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
} |
遇到了同样的问题,但设法解决了。我在VS 2017中。
我的主要代码:
1 2 3 4 5 6 7 8
| 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相似)。
导致异常的构造函数:
1 2 3
| CWizardPage1::CWizardPage1()
{
} |
不会导致异常的构造函数:
1 2 3 4
| CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
} |