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_CREATEWM_DESTROYWM_CLOSE
  • 用户输入WM_KEYDOWNWM_MOUSEMOVEWM_LBUTTONDOWN
  • 菜单和控件WM_COMMANDWM_NOTIFY
  • 绘图相关WM_PAINTWM_ERASEBKGND
  • 自定义消息WM_USERWM_COPYDATA

开发者可以根据需要,通过 消息映射(如 Win32 的消息回调函数 WndProc)或框架机制(如 MFC 的消息映射)来处理这些消息。

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。