WM_DESTROY
产生时间:
- WM_DESTROY 消息通常由操作系统发送,当应用程序的窗口即将被销毁时的消息
附带信息:
- wParam:为0
- IParam:为0
一般用法:
- WM_DESTROY 消息表示该窗口将要被销毁,此时应用程序需要执行一些清理工作,如释放窗口资源、保存数据等。
消息处理过程:
- 当应用程序接收到 WM_DESTROY 消息时,通常需要执行以下步骤:
1.释放窗口占用的资源,如内存、GDI 对象等。
2.保存应用程序的状态数据,例如用户设置、文档等。
3.取消定时器、关闭网络连接等。
4.发送 WM_QUIT 消息,通知消息循环程序退出。
WM_SYSCOMMAND
产生时间:
- 当点击窗口的最大化、最小化、关闭等。
附带信息:
- wParam:具体点击的位置,例如点击关闭就产生SC_CLOSE等
- IParam:鼠标光标的位置。
LOWORD(IParam) 水平位置
HIWORD(IParam) 垂直位置
一般用法:
- WM_SYSCOMMAND 消息用于通知应用程序执行一些系统级别的命令,如最小化窗口、最大化窗口、关闭窗口等。
消息处理过程:
- 当应用程序接收到 WM_SYSCOMMAND 消息时,通常需要根据 wParam 参数的值执行相应的系统命令处理逻辑,例如:
如果 wParam 为 SC_CLOSE,则需要关闭应用程序窗口。
如果 wParam 为 SC_MAXIMIZE,则需要最大化应用程序窗口。
如果 wParam 为 SC_MINIMIZE,则需要最小化应用程序窗口。
当WM_SYSCOMMAND消息被处理完以后,break跳出循环,DefWindowProc函数开始做默认处理,它也会在内部处理一遍WM_SYSCOMMAND,产生WM_DESTROY消息,将销毁窗口,,然后PostQuitMessage(0)发送了WM_QUIT消息程序退出了
这里当WM_SYSCOMMAND消息被处理时直接return 0,表示已经完全处理了这个消息,系统不会再对它进行其他的默认处理,导致了不会执行DefWindowProc,DefWindowProc处理WM_SYSCOMMAND消息的默认行为是产生 WM_DESTROY 消息来关闭窗口,当返回 0 时,系统就不会再执行这个默认的关闭窗口操作,也就无法关闭程序的窗口。
简单来说,就是加了return 0,表示这个消息已经处理完了,DefWindowProc函数就不会执行了,也就没有进行默认的产生WM_DESTROY消息来关闭窗口操作。
这里再讲下IParam,也就是鼠标光标的位置,鼠标的位置肯定有水平和垂直两个坐标,那么这一个参数怎么接收两个坐标呢?
我们看下lParam的类型:
共四字节,高两字节表示垂直坐标,低两字节表示水平坐标,这样就实现了一个参数表示两个坐标
那如何拿到这两个坐标呢?
LOWORD(IParam); //水平位置
HIWORD(IParam); //垂直位置
LOWORD 和 HIWORD 是用于从一个 DWORD 类型的数值中提取低位字(low word)和高位字(high word)的两个宏函数,LOWORD 从一个 DWORD 类型的数值中提取低位字(低16位),HIWORD 从一个 DWORD 类型的数值中提取高位字(高16位)。
例如:
DWORD dwValue = 0x12345678;
WORD wLowWord = LOWORD(dwValue); // wLowWord 的值为 0x5678
WORD wHighWord = HIWORD(dwValue); // wHighWord 的值为 0x1234
WM_CREATE
-
产生时间:
在窗口创建成功但还未显示时。 -
附带信息:
wParam:为0。
IParam:为CREATESTRUCT类型的指针。
通过这个指针可以获取CreatWindowEx中的全部12个参数的信息。 -
一般用法:
常用于初始化窗口的参数、资源等等,包括创建子窗口等。
这里IParam说的可以获取CreatWindowEx中的全部12个参数的信息,我们来验证一下
我们这里就直接获取最后一个,先将第12个参数这个附加参数给个值
之前说还可以创建子窗口
WM_SIZE
-
产生时间:
在窗口的大小发生变化后。 -
附带信息:
wParam:窗口大小变化的原因
IParam:窗口变化后的大小
LOWORD(IParam); //变化后的宽度
HIWORD(IParam); //变化后的高度 -
一般用法:
常用于窗口大小变化后,调整窗口内各个部分的布局。
我们添加一个DOS窗口来直观的看一下变化
这里是因为窗口从无到有也算一次窗口变化,所以这里OnSize被调用,将变化后的宽和高打印到了我们创建的DOS窗口中
WM_QUIT
-
产生时间:
由程序员发送。WM_QUIT 消息是 Windows 中一个非常重要的窗口消息,它表示应用程序应该退出 -
附带信息:
wParam:PostQuitMessage函数传递的参数。
IParam:0。
LOWORD(IParam); //变化后的宽度
HIWORD(IParam); //变化后的高度 -
一般用法:
用于结束消息循环,当GetMessage收到这个消息后,会返回FALSE,结束while处理,退出消息循环。