框架、文档与视图的毁灭(VC学习笔记)

1、  无文档的多视图程序的毁灭顺序及解决方法

在无文档的多视图程序中,程序主框架、子框架、及视图,在通常情况下,如果你直接关闭程序主框架,程序直接调用destroywindow,子框架及视图则自动清理,但程序不会调用子框架的destroywindow以及postncdestroy两个函数,如果你先关闭视图,关闭的顺序如下,程序先调用子框架的的destroywindow,然后调用视图的postncdestroy,接着就是子框架的postncdestroy,程序里没有调用到视图的destroywindow

有些情况下,必须保证程序的先子框架关闭,这时候上面这个顺序就会造成程序出错了,正如前面所说,直接关闭主框架时只调用了一个destroywindow函数,其余的函数都不执行了。解决的思路,我们得把程序的毁灭顺序改一改,把子框架的毁灭放在主框架毁灭之前:

CChildFrame *pChildFrame = (CChildFrame *)this->GetActiveFrame();

while (pChildFrame)

{

        pChildFrame->DestroyWindow();

        pChildFrame = (CChildFrame *)this->GetActiveFrame();

}

通过此循环,可以将所有子框架删除,在循环中,调用的GetActiveFrame函数是获得当前活动子框架,在删除当前活动子框架时,其它的子框架又会变成活动子框架,所以这种方法不会造成死循环。

2、  多文档视图程序的毁灭顺序

它和上面的情况差不多,只是多了一个文档,它的毁灭是在子框架的OnClose之后,子框架的destroywindow之前。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值