Windows 提供了丰富的 消息机制,在开发中有许多常用的消息号,用于处理窗口、控件、输入设备等的各种事件。以下是一些常用的消息号,按类别分类说明:
完整的消息对照表 WM_Messages值解释详见:https://www.ahk66.com/638
1. 窗口相关消息
消息号 | 说明 |
---|---|
WM_CREATE (0x0001) |
当窗口被创建时发送给窗口,用于初始化窗口(只触发一次)。 |
WM_DESTROY (0x0002) |
当窗口被销毁时发送,用于释放资源(只触发一次)。 |
WM_CLOSE (0x0010) |
当用户关闭窗口时发送,用于确认关闭(可通过代码取消关闭操作)。 |
WM_QUIT (0x0012) |
当应用程序终止时发送,一般由 PostQuitMessage 触发。 |
WM_SHOWWINDOW (0x0018) |
在窗口显示或隐藏时发送,可以用来捕捉窗口显示状态的变化。 |
WM_SIZE (0x0005) |
在窗口大小改变时发送,常用于调整子控件布局。 |
WM_MOVE (0x0003) |
当窗口位置发生改变时发送。 |
WM_SETFOCUS (0x0007) |
窗口获得焦点时发送。 |
WM_KILLFOCUS (0x0008) |
窗口失去焦点时发送。 |
2. 输入相关消息
键盘消息
消息号 | 说明 |
---|---|
WM_KEYDOWN (0x0100) |
用户按下键盘上的某个按键时发送。 |
WM_KEYUP (0x0101) |
用户松开键盘上的某个按键时发送。 |
WM_CHAR (0x0102) |
当按键产生字符输入时发送,常用于文本输入处理。 |
WM_SYSKEYDOWN (0x0104) |
系统按键(如 Alt )被按下时发送。 |
WM_SYSKEYUP (0x0105) |
系统按键(如 Alt )被释放时发送。 |
鼠标消息
消息号 | 说明 |
---|---|
WM_LBUTTONDOWN (0x0201) |
鼠标左键被按下时发送。 |
WM_LBUTTONUP (0x0202) |
鼠标左键被释放时发送。 |
WM_RBUTTONDOWN (0x0204) |
鼠标右键被按下时发送。 |
WM_RBUTTONUP (0x0205) |
鼠标右键被释放时发送。 |
WM_MOUSEMOVE (0x0200) |
鼠标移动时发送,用于捕捉鼠标移动轨迹。 |
WM_MOUSEWHEEL (0x020A) |
鼠标滚轮滚动时发送,wParam 包含滚动的方向和距离。 |
WM_MBUTTONDOWN (0x0207) |
鼠标中键被按下时发送。 |
WM_MBUTTONUP (0x0208) |
鼠标中键被释放时发送。 |
WM_NCHITTEST (0x0084) |
检测鼠标位于窗口的哪个区域(标题栏、边框、工作区等),用于实现拖动窗口或自定义区域。 |
3. 绘图与布局相关消息
消息号 | 说明 |
---|---|
WM_PAINT (0x000F) |
当窗口需要重绘时发送(例如,窗口被覆盖后重新显示)。 |
WM_ERASEBKGND (0x0014) |
用于擦除背景(在重绘窗口前发送)。 |
WM_SETFONT (0x0030) |
设置控件的字体。 |
WM_GETFONT (0x0031) |
获取控件的字体。 |
WM_CTLCOLOR (多个子消息) |
在绘制控件前,允许程序自定义控件的颜色(如 WM_CTLCOLORBTN 用于按钮)。 |
4. 消息框和菜单相关
消息号 | 说明 |
---|---|
WM_COMMAND (0x0111) |
通知父窗口用户操作的事件(如菜单项点击、按钮点击等)。 |
WM_SYSCOMMAND (0x0112) |
系统命令(如窗口关闭、最大化、最小化等)。 |
WM_INITMENU (0x0116) |
菜单即将显示时发送,允许程序在显示菜单前对其进行修改。 |
WM_INITMENUPOPUP (0x0117) |
子菜单弹出时发送,可用于动态调整菜单内容。 |
5. 定时器相关消息
消息号 | 说明 |
---|---|
WM_TIMER (0x0113) |
定时器触发时发送,结合 SetTimer 使用,用于周期性任务(如动画或轮询操作)。 |
6. 剪贴板相关消息
消息号 | 说明 |
---|---|
WM_CUT (0x0300) |
剪切操作时发送。 |
WM_COPY (0x0301) |
复制操作时发送。 |
WM_PASTE (0x0302) |
粘贴操作时发送。 |
WM_CLEAR (0x0303) |
清除剪贴板内容时发送。 |
WM_UNDO (0x0304) |
撤销操作时发送。 |
7. 文件与拖放相关消息
消息号 | 说明 |
---|---|
WM_DROPFILES (0x0233) |
当文件拖放到窗口上时发送,常用于实现拖放功能(如拖放图片到窗口)。 |
WM_COPYDATA (0x004A) |
用于进程间通信,传递数据到目标窗口。 |
8. 自定义消息
消息号 | 说明 |
---|---|
WM_USER (0x0400) |
用户自定义消息的起始值,用户可以在此基础上定义自己的消息。 |
WM_APP (0x8000) |
应用程序自定义消息的起始值,常用于进程内部的自定义通信。 |
9. 通知消息 (Notification Messages)
消息号 | 说明 |
---|---|
WM_NOTIFY (0x004E) |
通知消息,控件与父窗口之间的复杂交互(如列表视图、树视图等)。 |
NM_CLICK (子消息) |
鼠标点击时的通知,结合 WM_NOTIFY 使用。 |
NM_DBLCLK (子消息) |
鼠标双击时的通知,结合 WM_NOTIFY 使用。 |
10. 其他常用消息
消息号 | 说明 |
---|---|
WM_SETICON (0x0080) |
设置窗口的图标(标题栏的小图标)。 |
WM_GETICON (0x007F) |
获取窗口的图标。 |
WM_ENABLE (0x000A) |
启用或禁用窗口。 |
WM_HSCROLL (0x0114) |
水平滚动条的操作(滚动条移动、拖动等)。 |
WM_VSCROLL (0x0115) |
垂直滚动条的操作。 |
总结
这些消息被广泛用于 Windows 应用程序开发中,用于处理窗口事件、用户交互、定时器事件、剪贴板操作等。以下是几个类别的推荐:
- 窗口生命周期:
WM_CREATE
、WM_DESTROY
、WM_CLOSE
。 - 用户输入:
WM_KEYDOWN
、WM_MOUSEMOVE
、WM_LBUTTONDOWN
。 - 菜单和控件:
WM_COMMAND
、WM_NOTIFY
。 - 绘图相关:
WM_PAINT
、WM_ERASEBKGND
。 - 自定义消息:
WM_USER
、WM_COPYDATA
。
开发者可以根据需要,通过 消息映射(如 Win32 的消息回调函数 WndProc
)或框架机制(如 MFC 的消息映射)来处理这些消息。
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)