社区
界面
帖子详情
窗口打开的MessageBox未关闭的时候关闭该窗口异常退出
benbensan
2009-06-10 10:59:12
一个窗口A继承自CFrameWnd,该窗口调用MessageBox打开一个消息框,然后调用A的DestroyWindow,程序就崩溃了,请问什么原因,如何解决
...全文
124
18
打赏
收藏
窗口打开的MessageBox未关闭的时候关闭该窗口异常退出
一个窗口A继承自CFrameWnd,该窗口调用MessageBox打开一个消息框,然后调用A的DestroyWindow,程序就崩溃了,请问什么原因,如何解决
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pysjp
2009-06-11
打赏
举报
回复
楼主主要是因为MessageBox作为了窗口A的子窗口,强行退出模式窗口A引发的异常,可以参考下面的方法:
用全局的MessageBox也即::MessageBox同时指定一个拥有MessageBox的窗口句柄,或者设置成NULL,默认为桌面拥有。
会的越多不会的也就越多
2009-06-11
打赏
举报
回复
摸态窗口的问题.你要保证不要有其他路径能关闭摸态父窗口,如不能调用菜单
benbensan
2009-06-11
打赏
举报
回复
[Quote=引用 12 楼 cnzdgs 的回复:]
文档—视图架构的类对象都是动态创建的,在销毁窗口时会自动delete this,而MessageBox是在消息响应函数中创建的,当MessageBox返回后,还要访问窗口类对象,而此时对象已经释放了,所以会产生异常。
[/Quote]
继承自CFrameWnd的对象在PostNCDestroy的时候的确会delete this;,但在这之前会先销毁自己创建的所有child window,我认为MessageBox出的这个对话框应该也是其Child,照理说不应该异常。
有什么解决办法吗?
cnzdgs
2009-06-11
打赏
举报
回复
[Quote=引用 15 楼 benbensan 的回复:]
继承自CFrameWnd的对象在PostNCDestroy的时候的确会delete this;,但在这之前会先销毁自己创建的所有child window,我认为MessageBox出的这个对话框应该也是其Child,照理说不应该异常。
有什么解决办法吗?
[/Quote]
child window是具有WS_CHILD风格的窗口,MessageBox是popup window,不是child window,所以不会自动销毁。
pop3696
2009-06-10
打赏
举报
回复
当点击CTestWnd上某个按钮时貌似是这样:
void CTestWnd::onButtonclick()
{
AfxMessagebox("Hello", ID_OK);
//CTestWnd被 postMessage(WM_CLOCE,0,0);了,这时CTestWnd窗口对象被释放
//AfxMessagebox后面对窗口操作的代码会异常。
}
jian_tian_yang
2009-06-10
打赏
举报
回复
帮楼主顶一下
zhoujianhei
2009-06-10
打赏
举报
回复
DestroyWindow
应该是
PostMessage(WM_CLOSE, 0, 0);
fengrx
2009-06-10
打赏
举报
回复
调用::MessageBox试下吧,把HWND hWnd参数传NULL试下。
如果直接调用CWnd::MessageBox的话弹出窗口的父窗口就是你的CFrameWnd,所以会有问题。
Randyqiu
2009-06-10
打赏
举报
回复
[Quote=引用 12 楼 cnzdgs 的回复:]
文档—视图架构的类对象都是动态创建的,在销毁窗口时会自动delete this,而MessageBox是在消息响应函数中创建的,当MessageBox返回后,还要访问窗口类对象,而此时对象已经释放了,所以会产生异常。
[/Quote]
请问:“
当MessageBox返回后,还要访问窗口类对象
”。。
还要访问窗口类对象干什么的啊?
cnzdgs
2009-06-10
打赏
举报
回复
文档—视图架构的类对象都是动态创建的,在销毁窗口时会自动delete this,而MessageBox是在消息响应函数中创建的,当MessageBox返回后,还要访问窗口类对象,而此时对象已经释放了,所以会产生异常。
sanshao27
2009-06-10
打赏
举报
回复
我觉得问题归根到底不是在你的MessageBox上,应该是你非模态窗口的释放上有问题。好好在看看你处理释放的代码
benbensan
2009-06-10
打赏
举报
回复
我来详细描述一下
1、主窗体是一个SDI窗体
2、新写一个CTestWnd,继承自CFrameWnd
3、CMainFrame的成员变量m_pTestWnd,OnCreate时予以创建
m_pTestWnd = new CTestWnd;
m_pTestWnd->Create(NULL, "TEST");
并且予以ShowWindow
4、点击CTestWnd上某个按钮,该按钮处理函数调用了MessageBox("test");
5、CMainFram处理菜单注销按钮,该按钮的处理函数调用m_pTestWnd->DestroyWindow();
6、程序异常退出
如果MessageBox关掉的话,则第六步的不幸就不会发生
2hope
2009-06-10
打赏
举报
回复
PostMessage(WM_CLOSE, 0, 0);
NIKE霸天虎
2009-06-10
打赏
举报
回复
AfxMessageBox,你的叙述不是很清楚
oyljerry
2009-06-10
打赏
举报
回复
具体是MessageBox阻塞了窗口,还是窗口怎么退出..
fandh
2009-06-10
打赏
举报
回复
的确描述的不是很详细!
zjfhgdx
2009-06-10
打赏
举报
回复
我也有同样的问题,希望大牛来解答
Conry
2009-06-10
打赏
举报
回复
问:A窗口在哪里调用MessageBox打开一个消息框
A的DestroyWindow又是在哪里调用的
C#实现延时并自动
关闭
MessageBox
的方法
主要介绍了C#实现延时并自动
关闭
MessageBox
的方法,非常实用的功能,需要的朋友可以参考下
VC MFC实现自动
关闭
的弹出
窗口
.rar
VC MFC弹出
窗口
的实现例子,基于MFC的Afx
MessageBox
,与标准的
MessageBox
弹出消息框相比,MFC提供的 Afx
MessageBox
方法使消息框变得更加容易,且消息框支持自动
关闭
,点击OK将弹出两个Afx
MessageBox
:第一个是没有...
面向对象C#初级入门精讲(6)WinForm基础
欢迎加入QQ群538724338咨询提问 【课程特色】 1、课程设计循序渐进、讲解细致、通俗易懂、非常适合自主学习 2、教学过程实例丰富、强调技术关键点、并且分析透彻 3、物美价廉:本着知识共享、帮助更多有需求者原则,...
让
MessageBox
弹出在当前窗体的中央(C#)
WinForm中默认的
MessageBox
默认的弹出位置在屏幕的center,而且没有属性可以修改它,所以在当前活动窗体不在中央时,将会出现,弹出的
MessageBox
的错位。本代码实现
MessageBox
在当前窗体中央显示。
Python TKinter如何自动
关闭
主
窗口
Tkinter 是 Python 的标准 GUI 库。...在pycharm 调试Tkinter程序的时候,
关闭
右上角的X 实际上并
未
退出
进程,长期以往 再大的内存也会被耗尽。 一般就是下面的代码: from tkinter import * def main(): root = Tk
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章