hur.cn - 华软网

 热门搜索

这样销毁窗口会不会引起内存的泄露

  作者:未知    来源:网络    更新时间:2011/8/20

//////以下说的所有都是非模式对话框

1. 假如: 多文档程序上放了一个菜单项,点击就会显示一个对话框(只创建一次), 然后 关闭对话框隐藏之(用右上角的那个X关闭, 必须把 取消按钮给删去,不要处理OnCancle这个消息相应函数),而是要处理对话框的WM_CLOSE消息。

具体代码
void CMainFrame::OnDianji() 
{
if(m_pdlg==NULL)
{
   m_pdlg=new CMyDialog();
   
   m_pdlg->Create(IDD_DIALOG1,this);

   //AfxMessageBox(_T("创建"));

}

   m_pdlg->ShowWindow(SW_SHOW);


}


对话框的,IDCANCEL已经去掉了,不处理ONCANCLE!!

void CMyDialog::OnClose() 
{
// TODO: Add your message handler code here and/or call default


ShowWindow(SW_HIDE);   //实现隐藏功能!!


}



这样做带来的问题就是, 对话框到底是不是随着整个程序而销毁,释放内存?当我关闭对文档的时候,对话框所耗的内存会不会释放, 为什么会?或者不会? 说说理由。



第二个问题是:对话框风格的问题, 当是Child的时候,关闭X,居然没有反应,不会隐藏,而当是POPUP 、OVERlapped时候才可以隐藏之。。。。

为什么??





 第三个问题是:对第一个问题做了一个个小小改动, 多文档程序有个菜单项,你点击的时候,那么它会显示对话框,但是这次,对话框是依附一个面板(面板才是对话框的父窗口,框架是面板的父窗口,对话框已经去了边框,没有那个右上角那个X,同时风格设置为Child)

当点击面板的右上角那个X的时候,将面板及面板上的对话框一块隐藏。。。

如何实现? 是不是在面板的 WM_CLOSE消息函数里面 把面板和对话框都ShowWindow(SW_HIDE)了?  但是当你再次点击显示菜

单的时候, 面板窗口 可不像对话框有所谓的 非模式,模式之分,面板就不能ShowWindow(SW_HIDE)了。 我如何显示面板呢?



问题有点多, 麻烦大家了。。。。


---华软 网友回答---
对于第一个问题,我们要求是对话框随着主框架而销毁


但是我搞不清机制, 会不会关闭了主窗口, 对话框的内存又没有释放掉?



引用楼主 qunqun2012 的回复:
//////以下说的所有都是非模式对话框

1. 假如: 多文档程序上放了一个菜单项,点击就会显示一个对话框(只创建一次), 然后 关闭对话框隐藏之(用右上角的那个X关闭, 必须把 取消按钮给删去,不要处理OnCancle这个消息相应函数),而是要处理对话框的WM_CLOSE消息。

具体代码
void CMainFrame::OnDianji() 
{
if(m_pdlg==NUL……

---华软网友回复---
这样做带来的问题就是, 对话框到底是不是随着整个程序而销毁,释放内存?当我关闭对文档的时候,对话框所耗的内存会不会释放, 为什么会?或者不会? 说说理由。
==============
会的,因为当进程结束时,这个进程的所有的资源都会被操作系统回收。
---华软网友回复---
是这样啊 ,  对于第三个问题, 我很迷茫,  比如:一个对话框它拥有一个面板容器,它放在这个面板容器上,

同时对话框去掉边框,没有所谓的X存在, 那么当我去关闭那个面板容器X 的时候,

就隐藏容器和对话框,点击菜单,就显示他们。


我的思路是:该非模式对话框类,让它有个面板容器对象(成员对象) ,当 new的时候,调用对话框的构造函数,同时也构造了这个容器对象,

当ShowWindow(SW_SHOW) 的时候, 

那么就可以显示了。。。。 面板及对话框

ShowWindow(SW_HIDE) 就隐藏之。。。。



引用 2 楼 wltg2001 的回复:
这样做带来的问题就是, 对话框到底是不是随着整个程序而销毁,释放内存?当我关闭对文档的时候,对话框所耗的内存会不会释放, 为什么会?或者不会? 说说理由。
==============
会的,因为当进程结束时,这个进程的所有的资源都会被操作系统回收。

---华软网友回复---
使用NEW生成对象后,如果不明确使用DELETE销毁,则被分配的内存将在进程结束时同时释放。
---华软网友回复---
看来我对内存new  delete 学的很死板, 没领会,谢谢各位的回复

引用 4 楼 gold_water 的回复:
使用NEW生成对象后,如果不明确使用DELETE销毁,则被分配的内存将在进程结束时同时释放。
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。