消息队列是否存在于任何类型的程序中,或者Unix仅存在于用Windows界面编写的程序中?
例如这个程序:
int main()
{
short int n;
while(1)
{
if (n = GetKeyState(VK_UP))
{
cout << n;
}
else
{
cout << n;
}
Sleep(150);
}
return 0;
}
是否有消息队列?如果是,则GetKeyState函数从消息队列中检索键盘消息?
答案 0 :(得分:0)
是的,您必须致电PeekMessage
或GetMessage
以使GetKeyState
返回新值,以便进一步阅读:
http://blogs.msdn.com/b/oldnewthing/archive/2004/11/30/272262.aspx
在这里:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646301%28v=vs.85%29.aspx
如果您不希望使用消息循环GetAsyncKeyState
。
答案 1 :(得分:0)
GetKeyState
是一个Windows功能,它与Windows消息队列密切交互。该功能在Unix中不存在。
正如我在上一个问题中所解释的那样,GetKeyState
提供了有关与最近检索到的消息相关联的密钥状态的信息。由于您的控制台应用程序没有消息队列,并且没有消息,GetKeyState
不会产生有用的信息。
同样,正如您在上一个问题中所解释的那样,您可以使用GetAsyncKeyState
在API调用发生的瞬间获取有关状态的信息。
最后,再次重复上一个问题的陈述,通过检查负返回值来测试按下的键。例如:
if (GetAsyncKeyState(VK_UP) < 0)
....
我最重要的建议是,当你在Stack Overflow上提问时,你会看到答案!如果您不理解它们,请留下评论,要求澄清。