hur.cn - 华软网

 热门搜索

非模态对话框销毁的一点疑问

  作者:未知    来源:网络    更新时间:2011/4/11
msdn上建议在postncdestroy里面delete掉this来销毁对话框对象.
那我可不能够直接定义局部变量对话框,然后create,这样的话还能不能用delete this呢?
由于局部变量是在栈上,delete会不会犯错啊?

谢谢!
---华软 网友回答---
引用楼主 liucheng623 的回复:
msdn上建议在postncdestroy里面delete掉this来销毁对话框对象.
那我可不能够直接定义局部变量对话框,然后create,这样的话还能不能用delete this呢?
由于局部变量是在栈上,delete会不会犯错啊?

谢谢!


非模态就是new和create的
局部变量加domodal是模态的
---华软网友回复---
引用楼主 liucheng623 的回复:
msdn上建议在postncdestroy里面delete掉this来销毁对话框对象.
那我可不能够直接定义局部变量对话框,然后create,这样的话还能不能用delete this呢?
由于局部变量是在栈上,delete会不会犯错啊?

谢谢!

你没有new,就不需要delete的,你定义的局部变量,创建非模态对话框,最终看到的就是很快的一闪而过

---华软网友回复---
引用 2 楼 visualeleven 的回复:
引用楼主 liucheng623 的回复:
msdn上建议在postncdestroy里面delete掉this来销毁对话框对象.
那我可不能够直接定义局部变量对话框,然后create,这样的话还能不能用delete this呢?
由于局部变量是在栈上,delete会不会犯错啊?

谢谢!

你没有new,就不需要delete的,你定义的局部变量,创建非模态对话框,最终看到的就是很快……



---华软网友回复---
引用 2 楼 visualeleven 的回复:
你没有new,就不需要delete的,你定义的局部变量,创建非模态对话框,最终看到的就是很快的一闪而过


我是在cad中做的二次开发,经常有这类需求,就是在一个函数(cad中的一个命令)中需要一个非模态对话框,然后这个命令中需要这个对话框,函数运行完了对话框也就不用了,所以不会一闪而过.

现在问题是:我的对话框在其余地方也在用,所以对话框的PostNcDestroy中delete了this,现在如果是局部变量,不是指针,这个delete会不会犯错,谢谢!
---华软网友回复---
能够,局部new出来的,还能够在局部销毁,在销毁窗口以后直接delete就能够。
然则这样有一个问题,比如你
CMyDialog* pDlg = new CMyDialog;
然后Craete、显示窗口...

你再在下面直接销毁窗口,delete,怎么会不是一闪而过呢?除非是模态的、或你那个函数有窗口或消息循环什么的。

倒是建议你这样,类里面CMyDialog* m_pDlg;
函数里面m_pDlg = new CMyDialog;
创建窗口后就不论了。

无论是在本函数照旧另外函数或其余类里面,需要销毁时,找到m_pDlg销毁掉就能够了。这样能够省去你在对话框里面点击OK或CANCEL,你的目的即是这个吧?

如果你在对话框里面点击了结束,发一个消息回来,措置惩罚m_pDlg和销毁。
---华软网友回复---
你能够创建一次 关闭时是指隐藏窗口 在需要时再弹出显示  在程序结束时销毁窗口
---华软网友回复---
局部变量照旧不要用非模态了吧
---华软网友回复---
postquit吧 好像是这个名字
---华软网友回复---
引用 2 楼 visualeleven 的回复:
引用楼主 liucheng623 的回复:
msdn上建议在postncdestroy里面delete掉this来销毁对话框对象.
那我可不能够直接定义局部变量对话框,然后create,这样的话还能不能用delete this呢?
由于局部变量是在栈上,delete会不会犯错啊?

谢谢!

你没有new,就不需要delete的,你定义的局部变量,创建非模态对话框,最终看到的就是很快……



你把局部变量设为对象的指针,给指针分配内存时,如果用到New,就要在PostNCDestroy()消息释放堆上的内存,也就是加上delete this;这样就不会一闪而过了。如果是对象局部变量,窗口就会一闪而过。
---华软网友回复---
大家不要担心我的窗口一闪而过的问题,cad二次开发经经常运用这类非模态对话框,就在一个函数里面定义,而且销毁,由于在这之间会有要求用户在cad里面选择一条直线啊之类的操作的代码,操作完了,窗口才会消失.这个时候也就是我想他消失的时候.

我的问题是:
如果我在PostNCDestroy()里面delete的话,这个对话框是指针,是没问题,然则我其余地方也用到了这个对话框,可能是定义的局部变量,是domodal显示的,这个局部变量的对话框中的PostNCDestroy()里面delete this岂不是delete一个局部变量了哦?这会不会有问题.
先谢谢列位了!
---华软网友回复---
其实我的问题就是:
咱们按照非模态对话框的要求,在PostNCDestroy里面delete this了,这个对话框还能够用来显示(局部变量)模态对话框吗?
这个delete this会不会有问题?

我也试过,然则在debug模式下,是有个中断,然则release下,没有中断,然则不知道会不会有什么隐藏的问题.

高手支招,谢谢!
---华软网友回复---
不能用delete this。delete this的前提是对象必需是new生成的,即在堆上分配的空间,两者须成对存留。栈上面的变量在作用域结束之后系统会自动回收的,此处的情况是该临时对话框变量在所属的主类销毁时他会自动被回收。
---华软网友回复---
谢谢楼上的,然则我统一个对话框类,有时候时指针的,有时候时局部变量,改怎么办呢?
---华软网友回复---
  class="deleted_message"> 该回复于2011-04-14 14:22:12被版主删除
---华软网友回复---
用new创建非模对话框,然后在运用的时候显示,运用完毕后关闭,但不释放。在程序结束的时候在delete即可
---华软网友回复---
谢谢大家,看来暂时没有圆满的解决方案.      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。