ExMessage

这个结构体用于保存鼠标消息,定义如下:

struct ExMessage
{
	USHORT message;					// 消息标识
	union
	{
		// 鼠标消息的数据
		struct
		{
			bool ctrl		:1;		// Ctrl 键是否按下
			bool shift		:1;		// Shift 键是否按下
			bool lbutton	:1;		// 鼠标左键是否按下
			bool mbutton	:1;		// 鼠标中键是否按下
			bool rbutton	:1;		// 鼠标右键
			short x;				// 鼠标的 x 坐标
			short y;				// 鼠标的 y 坐标
			short wheel;			// 鼠标滚轮滚动值,为 120 的倍数
		};

		// 按键消息的数据
		struct
		{
			BYTE vkcode;			// 按键的虚拟键码
			BYTE scancode;			// 按键的扫描码(依赖于 OEM)
			bool extended	:1;		// 按键是否是扩展键
			bool prevdown	:1;		// 按键的前一个状态是否按下
		};

		// 字符消息的数据
		TCHAR ch;

		// 窗口消息的数据
		struct
		{
			WPARAM wParam;
			LPARAM lParam;
		};
	};
};

成员

message

消息标识,可为以下值:

消息标识 消息类别 描述
WM_MOUSEMOVE EM_MOUSE 鼠标移动消息。
WM_MOUSEWHEEL 鼠标滚轮拨动消息。
WM_LBUTTONDOWN 左键按下消息。
WM_LBUTTONUP 左键弹起消息。
WM_LBUTTONDBLCLK 左键双击消息。
WM_MBUTTONDOWN 中键按下消息。
WM_MBUTTONUP 中键弹起消息。
WM_MBUTTONDBLCLK 中键双击消息。
WM_RBUTTONDOWN 右键按下消息。
WM_RBUTTONUP 右键弹起消息。
WM_RBUTTONDBLCLK 右键双击消息。
WM_KEYDOWN EM_KEY 按键按下消息
WM_KEYUP 按键弹起消息。
WM_CHAR EM_CHAR 字符消息。
WM_ACTIVATE EM_WINDOW 窗口激活状态改变消息。
WM_MOVE 窗口移动消息。
WM_SIZE 窗口大小改变消息。

ctrl

Ctrl 键是否按下。仅当消息所属类别为 EM_MOUSE 时有效。

shift

Shift 键是否按下。仅当消息所属类别为 EM_MOUSE 时有效。

lbutton

鼠标左键是否按下。仅当消息所属类别为 EM_MOUSE 时有效。

mbutton

鼠标中键是否按下。仅当消息所属类别为 EM_MOUSE 时有效。

rbutton

鼠标右键是否按下。仅当消息所属类别为 EM_MOUSE 时有效。

x

当前鼠标 x 坐标(物理坐标)。仅当消息所属类别为 EM_MOUSE 时有效。

y

当前鼠标 y 坐标(物理坐标)。仅当消息所属类别为 EM_MOUSE 时有效。

wheel

鼠标滚轮滚动值,为 120 的倍数。仅当消息所属类别为 EM_MOUSE 时有效。

vkcode

按键的虚拟键码。仅当消息所属类别为 EM_KEY 时有效。

在微软网站上列出有所有的虚拟键码:https://docs.microsoft.com/windows/win32/inputdev/virtual-key-codes

scancode

按键的扫描码(依赖于 OEM)。仅当消息所属类别为 EM_KEY 时有效。

extended

按键是否为扩展按键,例如功能键和数字键盘。仅当消息所属类别为 EM_KEY 时有效。

prevdown

按键的前一个状态是否为按下。仅当消息所属类别为 EM_KEY 时有效。

ch

收到的字符。仅当消息所属类别为 EM_CHAR 时有效。

wParam

消息对应的 wParam 参数。仅当消息所属类别为 EM_WINDOW 时有效。

lParam

消息对应的 lParam 参数。仅当消息所属类别为 EM_WINDOW 时有效。

示例

(贡献者:慢羊羊  编辑