WM_CLOSE,WM_DESTROY,WM_QUIT

2023-11-08 15:04
文章标签 close destroy quit wm

本文主要是介绍WM_CLOSE,WM_DESTROY,WM_QUIT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

WM_CLOSE:

在系统菜单里选择了“关闭”或者点击了窗口右上角的“X”按钮,窗口过程就会收到WM_CLOSE。

DefWindowProc对 WM_CLOSE的处理是调用DestroyWindow。

WM_DESTROY:

DestroyWindow完成窗口的清理工作,最后向窗口过程发送WM_DESTROY。对于 WM_DESTROY,DefWindowProc不会处理。

WM_QUIT:

WM_QUIT消息不与窗口关联,因此永远不会通过窗口的窗口过程接收。 它仅由 GetMessage 或 PeekMessage 函数检索,这两个函数收到WM_QUIT后的返回值是0,即退出消息循环。

请勿使用 PostMessage 函数发布WM_QUIT消息;使用 PostQuitMessage。

https://learn.microsoft.com/zh-cn/windows/win32/winmsg/wm-close

一般的使用方法:

点击关闭按钮产生WM_CLOSE消息,在WM_CLOSE消息处理代码中调用DestroyWindow,DestroyWindow函数执行完毕产生WM_DESTROY消息,在WM_DESTROY消息中调用PostQuitMessage退出消息循环。

窗口处理程序代码:

LRESULT CALLBACK WindowProc(__in HWND hWindow,__in UINT uMsg,__in WPARAM wParam,__in LPARAM lParam)
{switch (uMsg){case WM_CLOSE:DestroyWindow(hWindow);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWindow, uMsg, wParam, lParam);}return 0;
}

消息循环代码:

	MSG msg;while ((ret = GetMessage(&msg, 0, 0, 0)) != 0) {if (ret == -1) {return -1;}if (ret == 0){printf("hello\r\n");break;}ret = IsDialogMessage(dialog->m_hwnd, &msg);if (ret){TranslateMessage(&msg);DispatchMessage(&msg);}}

这篇关于WM_CLOSE,WM_DESTROY,WM_QUIT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/370654

相关文章

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

delphi : 窗体的close,free,destroy的区别

一、我用application.create(TForm2,Form2)语句,创建了Form2,可是调用了Form2.close后,重新调用Form2.show. 刚才所创建的Form2仍然存在。问为了节约资源,应该怎样使用close,free,destroy. 三者的关系是什么? 1、Action:=caFree。 2、 with TForm1.Create(Application) do

初次用用Spring 和mybatis整合的报出Manual close is not allowed over a Spring managed SqlSession错误

一般这种错误是由于没有删dao实现类中的close,因为框架已经帮你写好了

【codeforces】293E. Close Vertices 点分治+树状数组

传送门:【codeforces】293E. Close Vertices 题目分析:找一棵树上有多少条路径长度不超过l且边权和不超过w的路径。 我们用点分治处理。 分治每一层,对每一个重心,预处理出到重心距离d,边权和为w的所有路径。将路径按照w排序,然后我们用双指针扫描数组,同时维护一个树状数组,树状数组中保存的是到重心距离为d的条数。因为有贡献可能来自子树,于是我们对子树进行同样的

【Get深一度】Win10 Setup will now quit. 系统管理员失去安装和移除软件的权利(求助帖)

1.问题详述 笔者在安装软件的时候无意在任务管理器中叉掉了一个进程,然后 ,悲剧了。。莫名其妙就失去了权限。  2.以安装mathtype为例 没到最后都会弹出一个Setup :  问题手打一遍:You do not appear to have the rights required to install or remove s

SendMessage和 PostMessage; 使用PostMessage(WM_QUIT)退出程序时导致的内存泄漏问题

引言:我们要使用代码关闭程序的话,应该向窗口发送WM_CLOSE或者直接调DestroyWindow(HWND)函数   (默认情况下WM_CLOSE的消息响应就是调用DestroyWindow(HWND)   函数,所以我们直接调用也达到一样的效果).这样可以令操作系统回收窗口占用着的内存资源后再退出程序. 千万不要直接用PostMessage(WM_QUIT);令程序退出,这样程序是可以退出

SAP LE学习笔记07 - MM与WM跨模块收货到仓库的流程中 如何实现 先上架再入库

上一章讲了LE中收货的一些特殊情况: 1,MM模块收货时,特别移动指标来标识的物料直接产生TO 2,MM中直接收货到仓库的固定Storage Bin(棚番)上 SAP LE学习笔记06 - MM与WM跨模块收货到仓库的流程中 带特别移动指标的物料也可以直接生成TO;MM中收货之后如何直接收到固定棚番(Storage Bin)上_sapwm和mm-CSDN博客 本章继续讲LE-WM中的其

F - Close Group

子集切割型 递推的dp 链接 有别于旅行商那种子集dp f[s][i]这种。。 子集切割型。。他研究的一般是子集和子集的拼凑。。 有点像 区间dp的递推类似。。把当前子集 分割成小子集+小子集。 #include <bits/stdc++.h>using namespace std;#define int long long#define ll __int128_t#define ar

HDU 4940(杭电多校#7 1006) Destroy Transportation system(瞎搞)

题目地址:HDU 4940 当时这个题一看就看出来了是网络流的最小割,然后就一直在想建图。。然后突然发现,应该要让T集合的数目最少,不然只要有两个,那这两个的每一个都可以跑到S集合,使得T集合变小。那就只能是1个了。然后。。枚举就好了。。但是虽然觉得这么做肯定没错。。但是不敢敲。。因为当时都3个小时了才只有10个队过了。。。后来又想了几遍后觉得这样没错,就写完交上了。果然AC。。。 代码如下: