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

系统 2074 0

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

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

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

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

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

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

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

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

<!--[if gte mso 10]> <mce:style><! /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} > <! [endif] > </p> <p class="MsoNormal"><span style="font-size: medium;" mce_style="font-size: medium;"><span style="font-family: 宋体;" mce_style="font-family: 宋体;">&nbsp;&nbsp; 测试后问题解决,程序可以顺利退出也没有内存泄露。值得一提的是单击新建框架窗口的关闭按钮这时框窗口的相关内存的释放是由它的父类<span class="line"><span lang="EN-US">CFrameWnd</span>的<span lang="EN-US">PostNcDestroy</span>函数完成:</span></span></span></p> <p class="MsoNormal"><span style="font-size: medium;" mce_style="font-size: medium;"><br /></span></p> <p class="MsoNormal"><span style="font-size: medium;" mce_style="font-size: medium;"><span style="font-family: 宋体;" mce_style="font-family: 宋体;"><span class="line"><textarea cols="50" rows="15" name="code" class="cpp">void CFrameWnd::PostNcDestroy() {  // default for frame windows is to allocate them on the heap  // the default post-cleanup is to 'delete this'.  // never explicitly call 'delete' on a CFrameWnd, use DestroyWindow instead  delete this; } </textarea> <br /></span></span></span></p> <p>&nbsp;<-->

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论