框架、文档与视图的毁灭(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之前。

  • 1
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

fiolee

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值