windows创建窗口、关闭窗口流程

摘要:
完成win32应用程序的退出过程:1.单击窗口右上角的关闭按钮以发送WM_close消息。

NC,即 non-client 区域,包括标题栏、窗口边框、最大、最小按钮、滚动条等。

一、在调用Windows的::CreateWindowEx函数创建窗口时,一般会先发出 WM_NCCREATE消息,然后发出 WM_CREATE消息。

当窗口准备关闭,此时先发出WM_DESTROY消息,再发出WM_NCDESTROY消息。

顺序如下:

WM_NCCREATE
WM_CREATE
。。。。
WM_DESTROY
WM_NCDESTROY


如果在关闭时,这个窗口存在子窗口,那么会先发送子窗口的WM_DESTROY和WM_NCDESTROY消息,接着发送父窗口的WM_DESTROY和WM_NCDESTROY消息。
顺序:
WM_DESTROY    //CHILD,子窗口消息
WM_NCDESTROY  //CHILD,子窗口消息
WM_DESTROY    //Parent,父窗口消息    
WM_NCDESTROY  //Parent,父窗口消息

二、WM_CLOSE、WM_DESTROY、WM_QUIT区别

WM_CLOSE:关闭应用程序窗口

WM_DESTROY:关闭应用程序

WM_QUIT:关闭消息循环

只有关闭了消息循环,应用程序的进程才真正退出(在任务管理器里消失)。

win32应用程序的完整退出过程:1、点击窗口右上角的关闭按钮,发送WM_CLOSE消息。

2、此消息处理中调用DestroyWindow函数,发送WM_DESTROY消息。

3、此消息处理中调用PostQuitMessage(0)函数,发送WM_QUIT消息到消息队列中。

4、GetMessage捕获到WM_QUIT,返回0,退出循环(应用程序真正退出)。

注意:按照上述正常流程,WM_QUIT是不会到达窗口过程的。(因为在GetMessage截获了WM_QUIT消息之后,程序已经彻底退出了!)

免责声明:文章转载自《windows创建窗口、关闭窗口流程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenWRT UCI API的使用 (libuci库的使用)MYSQL备份恢复数据(使用INTO OUTFILE和LOAD DATA INFILE)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vc++编程之在程序中加入网址链接

       在vc++对话框编程中,我们处于某种需要(介绍自己的软件或者自己的博客)可以在对话框上增加一个网址链接,用户只要一点击,就进入了相应的网页,我在此演示下如何完成。     1 打开编译器,我们新建一个基于对话框的工程(其他形式的也可以),我们以对话框为例,在资源视图中去除原有的静态文本控件,然后为对话框添加一个静态文本框(注:其他控件也可以...

微信小程序 发送模板消息的功能实现

背景 - 小程序开发的过程中,绝大多数会满足微信支付 - 那么,作为友好交互的体现,自然就会考虑到支付后的消息通知咯 - 所以,我的小程序项目也要求完成这个效果,so.分享一下自己的实现步骤,以方便道友们少踩点坑... 微信消息通知的区别: 1. 微信网页版、公众号的消息提醒 要求用户必须 "关注商家公众号",才支持消息的接收 并且还有个奇怪...

win10安装anaconda和Pycharm

本文来源:Python 工具——Anaconda+Pycharm 的安装过程 - 知乎 (zhihu.com) 其它参考来源: (41条消息) PyCharm与Anaconda超详细安装配置教程_思绪无限的博客-CSDN博客_anaconda 安装pycharm Python,Pycharm,Anaconda等的关系与安装过程~为初学者跳过各种坑 - TQ...

NETCore Bootstrap Admin 通用后台管理权限 [2]: Blazor 版本介绍

前言 上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能。本篇文章带来的是微软最新出的 Blazor 版本的 NET Core 通用权限管理系统 Blazor 简介 至于 Blazor 是什么,Blazor 的优缺点小伙伴们可以自行在园子里搜索一下,相关介绍还是非常...

Demo学习: FileUpload

FileUpload 文件上传,学习TUniFileUpload控件的使用 TUniFileUpload主要属性: Filter: 文件类型过滤,这个属性在web模式下是无效的,UniGUI目前版本还没有实现此功能,比较有用的功能,希望作者尽快实现此功能; MaxAllowedSize: 设置文件最大上传尺寸; message:标题以及消息文本,可翻译成...

ansible 调试 debug 一介凡人

一、debug模块 1、debug模块是Ansible Playbook中最常用的调试模块,可以在Playbook执行过程打印调试信息,特别是跟when条件语句一起使用时,可以调试特定条件下的执行过程。 比如:当变量 a 定义时,将 a 的值打印出来,当任务成功后,打印执行结果等。 msg:调试输出的消息 var:将某个任务执行的输出作为变量传递给d...