说说WM_DESTROY和WM_NCDESTROY的区别

news2024/11/19 19:38:22

在一个 Windows 窗口被销毁的时候,你会发现有两个比较类似的消息:WM_DESTROY和WM_NCDESTROY,那么,这俩兄弟之间有什么区别呢?今天就来讲讲。

不同之处在于,WM_DESTROY消息在窗口销毁序列的开头发送,而WM_NCDESTROY消息在结束时发送。当你有子窗口时,这会是一个重要的区别。如果你有一个带有子窗口的父窗口,那么消息流程(在没有奇怪的事情发生的情况下)将如下所示:
hwnd = parent, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_NCDESTROY
hwnd = parent, uMsg = WM_NCDESTROY

请注意,父窗口在销毁子窗口之前接收 WM_DESTROY,在子窗口销毁后接收 WM_NCDESTROY 消息。

有两个销毁消息,一个是自上而下的,另一个是自下而上的,这意味着在处理相应的消息时,可以执行适合特定模型的清理过程。例如,如果某些内容必须自上而下清理,则可以使用 WM_DESTROY 消息。

WM_NCDESTROY 是窗口将收到的最后一条消息(在没有奇怪的事情发生的情况下),因此它是进行 “最终清理” 的最佳位置。这就是为什么我们的例子程序要等到 WM_NCDESTROY才能销毁其实例变量。

这两个销毁消息与类似的 WM_CREATE 和 WM_NCCREATE 消息配对。正如 WM_NCDESTROY 是窗口接收的最后一条消息一样,WM_NCCREATE 条消息是第一条消息,因此这是创建实例变量的好地方。另请注意,如果 WM_NCCREATE 消息返回失败,那么你将得到的只是WM_NCDESTROY,而不会有 WM_DESTROY,因为你从未获得相应的 WM_CREATE 。

我一直提到的这种 “没有奇怪的事情发生的情况” 到底是指什么?
我们在下一篇文章中再具体说说。

总结

牢记一条:创建窗口的第一条消息:WM_NCCREATE,销毁窗口后的最后一条消息:WM_NCDESTROY。
是的,完美的东西都是这样简单而对称的。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What is the difference between WM_DESTROY and WM_NCDESTROY?》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL执行计划误选索引及修改方案

MySQL的优化器 MySQL在执行查询语句时使用那个索引是由server层的优化器决定的。优化器的作用是找到一个最优的执行方案,用最小的代价去执行语句。由于MySQL使用预估的方式去选择索引,所以MySQL可能会出现选择索引出错的情况,无法命中最优索…

刘韧工作手册(2023年版)

刘韧于2022年9月22日为云算科技做内部演讲。由谭缘整理成文,李欣欣编辑,朱芳文审定。一、认知篇01 干中学,重复做。“学”是为了“习”,学到的东西是为了下一次习的时候,做得更好。“习”,是最终实践的成果…

WSL安装教程

wsl安装教程引言前期准备工作安装wsl第一步第二步 检测系统版本第三步 确定虚拟机特性第四步 下载Linux内核的更新包第五步 设置WSL 2作为默认版本第六步 选择Linux发行版本并设置Linux账号小TIPS引言 Windows Subsystem for Linux(简称WSL)是一个在Win…

大家都在画圣诞树,我们用代码敲一颗吧~圣诞树

前段时间发布的文章很多人问怎么操作的,今天具体说明一下:PS:如果需要下载可以点击左下角阅读全文下载代码使用更方便具体步骤如下:复制下面代码在电脑里面新建一个记事本,将代码复制到新建的记事本里保存记事本&#…

虚拟机网络连通性选择

做运维的朋友对于虚拟机这个概念应该不会陌生,这里不做讲解。今天主要想对虚拟机的网络连通性的选择方法做一个简单的介绍,如果是老人就没必要看了,此文章针对刚入门初次使用虚拟机进行测试、工作的小伙伴。 咱们常见的虚拟机平台软件有很多&…

【实时数仓】用户行为日志采集模块单机模式部署,Nginx介绍、安装和配置,采集模块集群部署并使用Nginx进行反向代理

文章目录一 日志采集模块1 打包单机部署(1)修改gmall2022-logger中的logback.xml配置文件(2)修改SpringBoot核心配置文件application.propeties(3)测试(4)程序运行流程2 Nginx&#…

Grafana 的介绍和安装

版本:9.3.1 介绍 Grafana是一款能够提供查询、告警和可视化指标、日志、链路跟踪的软件,并且提供了TSDB时序数据库用于存储数据。 一共有3个版本,Grafana OSS(开源版),Grafana Enterprise(企业…

【C++】红黑树

一.红黑树的概念与性质 1.概念 红黑树是二叉搜索数的一种, 相比于AVL树(二叉平衡搜索树)红黑树通过减少旋转的次数来进一步优化了查找效率, 在每个节点上增加一个存储位表示节点的颜色, Red or Black, 通过对任何一条从根到叶子的路径上各个节点着色方式的限制, 红黑树确保没…

亚马逊云科技re:Invent:创新永无止境,科技重塑未来

作为全球IT行业一年一度的科技盛宴,2022亚马逊云科技re:Invent全球大会吸引了来自世界各国的开发者与企业客户的高度关注,其中自然也包括了广大中国企业。作为全球云计算领域的风向标,本届大会究竟揭示了怎样的行业趋势?发布了哪些…

【超聚变】FusionServer1288H V6安装CentOS系统

【超聚变】FusionServer1288H V6安装CentOS系统1、创建Raid2、安装系统2.1.使用IBMC地址,登录web界面2.2.选择启动虚拟控制台2.3.挂载镜像2.4.选择启动盘2.5.安装系统2.6.选择英文安装2.7.时区选择上海(Asia/Shanghai)2.8.选择最小化安装&…

【Vue源码解析】mustache模板引擎

模板引擎什么是模板引擎实现 Scanner 类根据模板字符串生成 tokens在 index.js 引入 parseTemplateToTokens实现 tokens 的嵌套One More Thingtokens 结合数据解析为 dom 字符串定义 lookup 函数定义 renderTemplate 函数什么是模板引擎 模板引擎是将数据变为视图最优雅的解决…

如何清除chrome浏览器缓存

清除浏览器的缓存知识调用前言引入具体操作知识调用 文章中可能用到的知识点前端学习:浏览器缓存方式有哪些(http协议 websql indexDB cookie localstorage sessionstorage)如何查看Chrome浏览器的页面缓存内容【详细教程】 前言引入 上期文…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.1 簇点链路

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.1 簇点链路31.1.1 簇点链路31.1.2 快速入门31 限流规则 31.1 簇点链路 31.1.1 簇…

52、网络

目录 一、网络通信 二、网络 三、 ip地址 四、域名 五、端口号 六、网络通信协议 1、协议(tcp/ip) 2、TCP和UDP 七、InetAddress类 八、Socket 1、基本介绍: 2、TCP网络通信编程 3、UDP网络通信编程(了解即可&#xff0c…

完整版JAVA物业管理系统源码带小程序+文字安装教程+视频

这套系统还包含了小程序前端源码。 技术架构 技术框架:springboot ssm shiro layui 运行环境:IntelliJ IDEA 2022 jdk1.8 Mysql5.7.4 maven nginx 宝塔面板 文字安装教程 1.下载源码后打开小皮面板,安装mysql5.7数据库,创…

【JavaEE】计算机是怎样工作的,五分钟带你理解计算机!!!

作者:学Java的冬瓜 博客主页:☀学瓜的主页🌙 专栏:JavaEE 分享:一、让你知道我的存在;二、让你存在下去,对我来说都是危险的,都违反第一条公理。 ——《三体》 主要内容:…

C++11标准模板(STL)- 算法(std::push_heap)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 数据结构的堆物理结构是数…

Linux离线安装RabbitMQ

使用docker离线安装rabbitmq 1.在外网环境下载rabbitmq:management镜像 命令&#xff1a;docker pull rabbitmq:management 启动容器&#xff08;即验证镜像是否有用&#xff09;&#xff1a; 命令&#xff1a;docker run -d --hostname wxrabbit --name rabbitmq -p 15672:15…

【深度学习】学习率预热和学习率衰减 (learning rate warmup decay)

背景 在深度学习中学习率这个超参数&#xff0c;在选取和调整都是有一定策略的&#xff0c;俗称炼丹。有时我们遇到 loss 变成 NaN 的情况大多数是由于学习率选择不当引起的。 神经网络在刚开始训练的时候模型的权重(weights)是随机初始化的&#xff0c;选择一个较大的学习率…

干货 | 浅谈携程大住宿研发效能提升实践

作者简介Mia &#xff0c;携程高级项目经理&#xff0c;负责酒店Devops实践&#xff0c;关注Devops/敏捷等领域。YY&#xff0c;携程敏捷教练&#xff0c;负责团队敏捷转型&#xff0c;研发效能提升实践&#xff0c;关注Agile、Devops、研发效能等领域。一、前言管理大师彼得德…