没有文档/视图架构的MFC

时间:2009-11-05 11:59:29

标签: c++ user-interface mfc

我想在没有文档/视图架构的情况下使用MFC的帮助。

我创建了一个没有doc / view支持的项目,Visual C ++创建了一个 CFrameWnd 和一个继承自 CWnd 的视图。我将继承自 CWnd 的视图替换为继承自 CFormView 的新视图。

然而,当我运行程序时,关闭窗口后,我收到堆损坏错误。

3 个答案:

答案 0 :(得分:3)

如果在框架窗口处理WM_CREATE的位置,你更改代码以创建具有AFX_IDW_PANE_FIRST的“magic”id的CFormView实例,你会发现它成为框架窗口的视图。这是由CFrameWnd :: InitialUpdateFrame()的行为引起的,它将在MFC中调用。 MSDN页面对这个有用的小功能进行了评论:

http://msdn.microsoft.com/en-us/library/ch3t7308.aspx

答案 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时,我得到了错误。