c++ - MFC 对话框属性表使用在 VS 2017 中产生错误,适用于 VS 2013
问题描述
有一个现有的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
为 asCPropertyPage
在 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();
这会在 处引发相同的 CResourceException sheet.DoModal()
。
我为使其工作所做的更改是在CWizardPage1
构造函数中(类似 for CWizardPage2
)。
导致异常的构造函数:
CWizardPage1::CWizardPage1()
{
}
不会导致异常的构造函数:
CWizardPage1::CWizardPage1()
: CMFCPropertyPage(IDD_WIZARD_PAGE1)
{
}
推荐阅读
- amazon-web-services - AWS copilot 无法创建管道
- mysql - 如何检查“不在”日期之间
- python-3.x - 当我编译yolov3我得到警告
- java - 从顶点列表构建 GraphPath
- javascript - 如何使用 Puppeteer.js 获取 XPATH 的确切文本内容
- java - JPA Query 故意离开 SQL 注入
- javascript - 无法在节点项目中使用 Microsoft 身份验证库创建 UserAgentApplication
- ruby-on-rails - 如何在 Heroku pry rails 控制台中显示 Rails ActiveRecord 查询时间?
- c# - 等待与等待 Task.Delay 尝试学习
- java - Java FX 移动形状