【问题标题】:Message queue - WinAPI消息队列 - WinAPI
【发布时间】:2014-08-22 08:59:31
【问题描述】:

消息队列存在于任何类型的程序中,还是 Unix 仅存在于以 Windows 界面编写的程序中?

例如这个程序:

int main()
{
    short int n;
    while(1)
    {
        if (n = GetKeyState(VK_UP))
        {   
            cout << n;
        }
        else
        {
            cout << n;
        }

    Sleep(150);
    }

    return 0;
}

有没有消息队列?如果是,GetKeyState 函数是否从消息队列中检索键盘消息?

【问题讨论】:

  • 你为什么问了你之前的问题,然后忽略了答案?

标签: c++ winapi keyboard keypress


【解决方案1】:

是的,您必须调用PeekMessageGetMessage 以使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

【讨论】:

    【解决方案2】:

    GetKeyState 是一个与 Windows 消息队列密切交互的 Windows 函数。该函数在 Unix 中不存在。

    正如我在您之前的问题中所解释的,GetKeyState 提供有关与最近检索到的消息相关联的关键状态的信息。由于您的控制台应用程序没有消息队列,也没有发送消息,GetKeyState 不会产生有用的信息。

    同样,正如您在上一个问题中所解释的,您使用GetAsyncKeyState 来获取有关状态的信息在进行 API 调用时

    最后,再次重复您之前问题中的语句,通过检查是否有负返回值来测试按下的键。例如:

    if (GetAsyncKeyState(VK_UP) < 0)
        ....
    

    我对您最重要的建议是,当您在 Stack Overflow 上提问时,您会阅读答案!如果您不理解它们,请让 cmets 要求澄清。

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 2020-11-27
      • 2020-04-18
      • 2011-02-20
      • 2013-08-09
      • 2012-10-10
      • 2012-09-19
      • 2014-04-21
      • 2012-03-16
      相关资源
      最近更新 更多