首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消息队列- WinAPI

消息队列- WinAPI
EN

Stack Overflow用户
提问于 2014-07-02 01:46:59
回答 2查看 175关注 0票数 0

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

例如,这个程序:

代码语言:javascript
复制
int main()
{
    short int n;
    while(1)
    {
        if (n = GetKeyState(VK_UP))
        {   
            cout << n;
        }
        else
        {
            cout << n;
        }

    Sleep(150);
    }

    return 0;
}

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

EN

回答 2

Stack Overflow用户

发布于 2014-07-02 01:57:45

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

票数 0
EN

Stack Overflow用户

发布于 2014-07-02 16:02:50

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

正如我在前面的问题中所解释的那样,GetKeyState提供了与最近检索到的消息相关的键状态信息。由于您的控制台应用程序没有消息队列,并且没有发送消息,因此GetKeyState不会产生任何有用的信息。

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

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

代码语言:javascript
复制
if (GetAsyncKeyState(VK_UP) < 0)
    ....

我给你的最重要的建议是,当你在Stack Overflow上问一个问题时,你会读到答案!如果你不理解它们,请留下要求澄清的评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24516385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档