怎么使用ExMessage获取ctrl+快捷键

1

[已解决]

下面是我的代码实测无效

#include <graphics.h>

int main()
{
	ExMessage message;
	while (peekmessage(&message))
	{
		if (message.message == WM_KEYDOWN)
		{
			if (message.ctrl == true)
			{
				if (message.ch == 'v')
				{
					// TODO
				}
			}
		}
	}
	return 0;
}

=更新

问题已经解决了, 发现不能使用ExMessage需要使用GetAsyncKeyState函数

while (true)
{
	while (peekmessage(&message))
	{
			if (GetAsyncKeyState(VK_CONTROL)&0x8000)
			{
				if (GetAsyncKeyState(VK_CONTROL)&0x8000)
				{
					// TODO
				}
			}
	}
}
ava
Margoo

2021-8-11

1

消息 WM_KEYDOWN 属于按键消息,所属消息类型为 EM_KEY。

ExMessage::ctrl 仅当消息所属类别为 EM_MOUSE 时有效。

ExMessage::ch 仅当消息所属类别为 EM_CHAR 时有效。

所以你的代码是无法正确执行的。

需要使用 GetAsyncKeyState(VK_CONTROL) 或自行判断 ctrl 的按下与抬起。

ava
慢羊羊

2021-8-12

技术讨论社区