VC编程中关于新建的框架窗口的销毁的一个心得

本文介绍了一个MFC应用程序中动态创建单文档框架窗口的方法,并解决了窗口关闭后的内存释放问题。作者通过使用IsWindow函数检查窗口句柄的有效性,确保了程序退出时资源的正确释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    因为要做一个项目,其中一个需求是动态新建一个单文档框架窗口和视图窗口。大致清楚单文档窗口的构建需要新的框架类调用LoadFrame函数来触发。新建并显示窗口并不是大问题,在程序退出时释放框架窗口的相关内存的释放出现了一些问题。

代码实现过程大致是这样的:
首先在应用程序类里定义一个框架类指针: 
 

新建框架窗口的相关代码:

   最后在应用程序类的ExitInstance()函数对框架窗口进行销毁:

    编译通过,开始运行。先运行主框架,然后新建一个框架窗口,然后关闭新建的框架窗口,再退出主程序就出现下面的错误:

出错图

经过发现,错误是在CNewFrameApp::ExitInstance()函数的m_pOpenglFrame->DestroyWindow()这一句触发的。

我分析,在关闭新建的框架窗口后新建的框架窗口的窗口句柄已经无效,但是其值并非为NULL,使用NULL!=hWnd来判断窗口句柄是否有效并不准确,我要做的是找到一种准确判断窗口句柄是否有效的办法。于是我把代码改为:

  

    测试后问题解决,程序可以顺利退出也没有内存泄露。值得一提的是单击新建框架窗口的关闭按钮这时框窗口的相关内存的释放是由它的父类CFrameWnd的PostNcDestroy函数完成:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值