界面线程的退出 窗口关闭的流程
来源:互联网 发布:oa办公系统java代码 编辑:程序博客网 时间:2024/05/04 21:39
转载请表明出处
退出消息循环
我们知道windows程序的一个界面线程有一个消息队列,线程创建窗口以后,就无限循环消息队列,消息队列里面的消息被一个一个取出来发送到相应的窗口过程。当从消息队列得到的消息是WM_QUIT ,线程就不再读取消息,就退出,结束线程。所以要退出线程,只要给线程发送,也就是给消息队列发送WM_QUIT即可。一般来说,PostQuitMessage()函数就给消息队列发送WM_QUIT。
按照上面的说明,消息队列里面的WM_QUIT以后的消息,也就是在WM_QUIT发送以后的消息均得不到处理。
还有就是我们可以直接向消息队列里面发送WM_QUIT消息,通过使用PostMessage,只要能保证消息能进入消息队列。按照道理来说,PostMessage发送的消息是要经过消息队列的,但是有的时候,他也是直接调用窗口过程的,(sendMessage是直接调用目标窗口的窗口过程,不经过消息队列。)所以一般不用PostMessage来发送WM_QUIT消息,为什么呢?不是说了么,有的时候他是不投入到消息队列的,那么线程就从消息队列里面得不到WM_QUIT,就退出不了线程。
什么时候呢?比如说:模式对话框的时候,给主窗口用PostMessage发送消息的话,这个时候就是直接调用主窗口的窗口过程。
关闭窗口的流程:
我们知道窗口的默认窗口过程是DefWindowProc,这个是windows提供的。在我们自己的窗口过程中,我们不需要关心的消息最后都统统传递给DefWindowProc。
当我们点标题栏的关闭按钮,或者系统菜单的关闭菜单的时候,DefWindowProc得到输入事件信息,给对应的窗口发送WM_SYSCOMMAND 消息,也就是窗口过程再一次会得到WM_SYSCOMMAND消息,这个消息我们不作处理,直接传递给DefWindowProc的话,那么DefWindowProc在处理WM_SYSCOMMAND消息的时候,再一次发送WM_CLOSE 消息给窗口过程,这个消息我们也不作处理,直接传递给DefWindowProc。那么,DefWindowProc得到WM_CLOSE后,调用DestroyWindow() 进行窗口摧毁,DestroyWindow进行一些必要的处理之后,又发送WM_DESTROY和WM_NCDESTROY 被发送给窗口过程。这消息处理完后,窗口完全被
摧毁。
这样,在窗口被摧毁之前,我们有至少4此机会被通知,WM_SYSCOMMAND,WM_CLOSE,WM_DESTROY,WM_NCDESTROY。
反过来说,我们要关闭一个窗口时候,可以发送WM_SYSCOMMAND,WM_CLOSE消息。为什么不通过发送WM_DESTROY,WM_NCDESTROY呢。看看上面的处理过程,如果通过发送WM_DESTROY,WM_NCDESTROY,那么DestroyWindow函数的处理怎么办呢?对了,直接调用DestroyWindow不就是了。
在进一步,如果窗口关闭后,我们想退出线程怎么办?好办,WM_DESTROY的时候,PostQuitMessage发送WM_QUIT就OK了。想想,为什么不在WM_CLOSE的时候发送WM_QUIT。
- 界面线程的退出 窗口关闭的流程
- MFC 用户界面线程:界面线程的退出 窗口关闭的流程
- 关闭窗口的流程
- 退出界面,优雅的关闭软键盘。
- MFC关闭窗口 退出软件的 用法
- JVM关闭及线程的退出
- 退出界面时,关闭WebView界面上的声音视频
- Android2.2中关闭所有界面,彻底退出的方法
- Android退出程序的时候把所有界面一起关闭
- jsp页面中窗口关闭,退出的方式
- vc里几个关闭窗口退出程序的语句
- 主窗口关闭后,主进程没有退出的解决办法
- jsp页面中窗口关闭,退出的方式
- QT 应用程序关闭某个窗口时,关闭打开的所有其他窗口并退出程序
- 多线程关闭窗体时所有线程都退出的方法
- C# 窗体退出后关闭线程的代码
- VC关闭窗口退出
- C#中,退出窗口的时候如何干干净净把程序中的线程也干净的退出
- asp.net2.0 上传类-带详细注释
- 学院正在进行双电路的改造
- 127.0.0.1访问,没有权限: 'GetObject'问题的解决(转)
- WM5里很多你不知道的注册表项的功能
- GCC 学习笔记 - 应公子的专栏 - CSDNBlog
- 界面线程的退出 窗口关闭的流程
- js调试工具
- IPv6的一些小技巧(二)IPv6地址方案
- .NET字符串的特点,正则表达式在其中如何运用
- SQL Server学习笔记之 T-SQL研究之[表结构的建立]
- 程序员到项目经理的转型过程
- ASP.NET设计网络硬盘之两重要类
- 为初学者写的Winsock编程--一个简单的TCP服务器
- 新浪的股票查询接口