使用GetAsyncKeyState()异步获取按键消息

GetAsyncKeyState(VK_**)

记录两种状态——最高位为一说明调用时改键被按下;

最低位记录在上次调用该函数之前是否被调用过:为一则是;

第一种状态信息很好理解,但是第二种是什么意思呢?

这个信息是用来帮助我们在判断组合键时使用的:
判断方法:

if(GetAsyncKeyState(VK_**)<0);

或者

if(GetAsyncKeyState(VK_**)&0x8000)

两种方法;

这两种方法是判断某键是否被按下的时候使用的;

除此之外,在使用该方法的时候要注意的是:

Windows的消息机制使得按键消息会不断地响应:这样的结果是如果在if判断之后有循环,在执行循环的时候消息的响应会使得代码跳出循环而中断循环;响应完消息之后继续执行循环;而这次的响应可能会使得另一个代码段被执行;因此在逻辑上应该注意这种情况的发生;(因为在控制台下的DOS环境中代码是连续执行的,而我们的循环设置的逻辑也是不希望在非正常情况下跳出循环而去执行别的代码,这样会导致意外的情况发生;其实实际上我们所有的循环都是按照在DOS环境下的这种逻辑设置的,否则根本没法设计循环逻辑,)

总而言之,就是在消息相应中最好不用或者慎用循环,多采用if判断去实现逻辑,而这也符合Windows的消息响应机制;

其次在使用GetAsyncKeyState(VK_**)函数的时候不要忘了他的另一个功能——最低位的记录;这会在特殊的时候很方便的帮我们实现某些功能-----------(不然为什么要设置这个功能呢:)

猜你喜欢

转载自blog.csdn.net/qq_42468130/article/details/84332502