2009-11-05 154 views
2

我想在没有文档/视图体系结构的情况下使用MFC。没有文档/视图体系结构的MFC

我创建没有文档/视图支持一个项目时,Visual C++创建的CFrameWnd和从的CWnd继承的图。我将从CWnd继承的视图替换为从继承的新视图CFormView

但是,当我运行我的程序时,在关闭窗口后,出现堆损坏错误。

+0

我不明白“从CWnd继承的_view继承自CFormView_的新视图”。 – user34660 2017-04-09 19:15:19

回答

1

问题是MFC的生命周期管理。视图声明(由Visual C++向导创建)是:

CChildView  m_wndView; 

我取代上述代码用:

CChildFormView m_wndView; 

CChildView继承的CWnd,CChildFormView从的CFormView继承。这两个视图都是由向导创建的,但只有CChildFormView使用宏,因此IMPLEMENT_DYNCREATE宏使用DECLARE_DYNCREATE/

由于m_wndView正在堆栈中创建,当MFC自动调用delete时,我得到错误。

+0

我不明白如何将CChildView的名称更改为CChildFormView会更改应用程序的构建或执行方式,这些名称是我们提供的名称,而不是MFC类的名称。我怀疑这与其他人有任何关联。很多年前,我写了一篇文章描述如何创建一个没有文档/视图体系结构的MFC CFormView应用程序。这并不容易,至少不是那样。 – user34660 2017-04-09 19:21:52

1

既然您想使用对话框编辑器,而您又不想使用文档/视图架构,那么您可能需要一个“基于对话框”的应用程序。

3

如果在框架窗口处理WM_CREATE的地方,您更改代码以创建具有AFX_IDW_PANE_FIRST的“魔术”ID的CFormView实例,您会发现它成为框架窗口的视图。这是由于CFrameWnd :: InitialUpdateFrame()的行为,它将在MFC中调用。这个有用的小功能的MSDN页面评论:

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