消息队列存在于任何类型的程序中,还是Unix只存在于用Windows界面编写的程序中?
例如,这个程序:
int main()
{
short int n;
while(1)
{
if (n = GetKeyState(VK_UP))
{
cout << n;
}
else
{
cout << n;
}
Sleep(150);
}
return 0;
}有没有消息队列?如果是,GetKeyState函数是否从消息队列中检索键盘消息?
发布于 2014-07-02 01:57:45
是的,您必须调用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。
发布于 2014-07-02 16:02:50
GetKeyState是一个与Windows消息队列紧密交互的Windows函数。Unix中不存在该函数。
正如我在前面的问题中所解释的那样,GetKeyState提供了与最近检索到的消息相关的键状态信息。由于您的控制台应用程序没有消息队列,并且没有发送消息,因此GetKeyState不会产生任何有用的信息。
同样,正如您在上一个问题中所解释的,您可以使用GetAsyncKeyState来获取有关发出API调用时的状态的信息。
最后,再次重复前面问题中的语句,通过检查负返回值来测试按下的键。例如:
if (GetAsyncKeyState(VK_UP) < 0)
....我给你的最重要的建议是,当你在Stack Overflow上问一个问题时,你会读到答案!如果你不理解它们,请留下要求澄清的评论。
https://stackoverflow.com/questions/24516385
复制相似问题