我想在没有文档/视图架构的情况下使用MFC的帮助。
我创建了一个没有doc / view支持的项目,Visual C ++创建了一个 CFrameWnd 和一个继承自 CWnd 的视图。我将继承自 CWnd 的视图替换为继承自 CFormView 的新视图。
然而,当我运行程序时,关闭窗口后,我收到堆损坏错误。
答案 0 :(得分:3)
如果在框架窗口处理WM_CREATE的位置,你更改代码以创建具有AFX_IDW_PANE_FIRST的“magic”id的CFormView实例,你会发现它成为框架窗口的视图。这是由CFrameWnd :: InitialUpdateFrame()的行为引起的,它将在MFC中调用。 MSDN页面对这个有用的小功能进行了评论:
答案 1 :(得分:1)
由于您想使用对话框编辑器并且您不想要文档/视图架构,因此可能需要“基于对话框”的应用程序。
答案 2 :(得分:1)
问题在于MFC的生命周期管理。视图声明(由Visual C ++向导创建)是:
CChildView m_wndView;
我用以下代码替换了上面的代码:
CChildFormView m_wndView;
CChildView继承自 CWnd ,CChildFormView继承自 CFormView 。这两个视图都是由向导创建的,但只有CChildFormView使用 DECLARE_DYNCREATE / IMPLEMENT_DYNCREATE 宏。
由于m_wndView是在堆栈中创建的,当MFC自动调用delete时,我得到了错误。