因为要做一个项目,其中一个需求是动态新建一个单文档框架窗口和视图窗口。大致清楚单文档窗口的构建需要新的框架类调用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: 宋体;"> 测试后问题解决,程序可以顺利退出也没有内存泄露。值得一提的是单击新建框架窗口的关闭按钮这时框窗口的相关内存的释放是由它的父类<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> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> <-->
分享到:
相关推荐
VC框架窗口界面设计教程 vc教程 vc界面设计VC框架窗口界面设计教程 vc教程 vc界面设计VC框架窗口界面设计教程 vc教程 vc界面设计
VC 限定框架窗口的大小和位置,无法移动且固定大小的SDI,用VC 编写实现这种固定窗口大小,且无法用鼠标拖动的窗口。窗口是不能改变大小的,窗口标题也不能被拖动,运行程序后,窗口的位置就已经固定,并不能移动和...
VC编程VC编程VC编程VC编程VC编程VC编程VC编程VC编程VC编程VC编程VC编程
vc 编程实例vc 编程实例vc 编程实例vc 编程实例vc 编程实例vc 编程实例vc 编程实例vc 编程实例vc 编程实例
VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程VC图形编程...
vc__软件框架窗口界面设计.pdfvc__软件框架窗口界面设计.pdf
如何禁止框架窗口在标题中显示文档名 如何排列MDI子框架窗口 如何删除MDI框架窗口中的菜单 如何设置框架窗口最大化时的大小和位置 如何在文档中遍历视图 如何在文档模板中遍历文档 如何在...
VC编程 PPT课件 VC VC编程 VC编程
一个很好的框架窗口例子,采用vc开发!!
VC编程规范VC编程规范VC编程规范VC编程规范
使 用VC进行项目开发,特别是简单的MIS系统开发中,通常在用户没有进行操作之前显示的是主框架的窗口(用户点击操作菜单项再弹出处理窗口)。因此给主框 架窗口提供一个背景图片就显得很有必要(例如一用户满意的...
VC编程中20种各种编程技巧和方法1. 如何激活当前屏幕保护程序
vc数据库编程VC编程中如何操作数据库中
自绘菜单的实现,在VC中透明浮动按键的实现,用VC设计托盘图标程序,图像平滑滚动效果的VC实现,利用钩子实现菜单阴影效果,在VC下显示JPEG、GIF格式图像的一种简便方法,制作 MSN、QQ 的消息提示窗口,VC编程中如何...
vc框架窗口设计,很不错的一个程序,大家可以下来看看,谢谢啦
插件编程框架Plugins are the common way for extending applications. They are usually implemented as DLLs. The host application locates the plugins (either by looking in a predefined folder, or by some ...
VC编程助手,提供vc快速编程方法,里面包含vc++6.0的编程帮助。包括关键字,类,函数提示等。
VC编程实现网络语音电话,只要本地用户和远端用户同时运行,并且有带麦耳机,一方输入IP呼叫对方,对方接电话,就可通过网络畅谈
VC 高级编程 VC 高级编程 VC 高级编程
VC编程中如何在界面上实现3D文字VC编程中如何在界面上实现3D文字