MDI中对象的销毁过程

对象的销毁步骤

1.首先看对象的包含关系。
CWinApp::m_pDocManager对象中有成员m_templateList,存储的是docTemplate.
每一个MultiDocTemplate中有成员 m_docList,存储的是所有的doc对象。
每一个Document里面有成员m_viewList,里面存储的是这个doc对应的所有view。
每一个view都有一个 parentFrame,这个parentFrame就是 MDIChildFrame。

2.下面来看是怎样来销毁对象的

这里已经看到对 doc 对象的delete了,就是在图片的最后一句。那么对view和 MDIChildFrame的 delete语句又在什么地方呢?

接着看DestroyWindow()的代码

BOOL CMDIChildWnd::DestroyWindow()
{

...

    MDIDestroy();

...

最关键的一句是MDIDestroy(); ,它的代码如下,作用就是发送了一个消息。

void CMDIChildWnd::MDIDestroy()
    { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(GetParent()->m_hWnd, WM_MDIDESTROY, (WPARAM)m_hWnd, 0L); }

这个发送消息的代码我们看不到源代码,只能看到一些汇编代码。

但是我们只需要记着: 这个发送消息的函数会先 delete view,然后会在这个childFrame没有任何view之后再 delete frame。只需要知道他们delete的先后顺序,然后稍微跟踪下代码,一切都好办了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值