最可靠的鼠标点击检查

时间:2015-06-17 09:16:34

标签: c++ winapi

如果某个用户点击了某个按钮,我该如何在Windows上正确检查?目前,我有以下点击检查代码:

bool cButton::isCursorCrossing ( ) const
{
    int posx, posy;
    g_pVGuiSurface->SurfaceGetCursorPos ( posx, posy );
    if ( posx > m_render_x && posx < m_render_x + buttonSize )
    {
        if ( posy > m_render_y && posy < m_render_y + buttonSize )
        {
            return true;
        }
    }
    return false;
}

bool cButton::isClicked ( ) const
{
    if ( isCursorCrossing ( ) )
    {
        if ( GetAsyncKeyState ( 0x01 ) & 1 )
        {
            return true;
        }
    }
    return false;
}

但它有时不起作用 - 我必须单击按钮5到10次才能看到结果,我认为这是由GetAsyncKeyState引起的。

2 个答案:

答案 0 :(得分:0)

您需要切换到类似事件的系统,而不是轮询。 GetAsyncKeyState会在您调用鼠标按钮时告诉您鼠标按钮是否已关闭。如果用户最近点击过,则无法报告内存。因此,它能够可靠地工作是很自然的。您的应用无法响应用户操作,只有在恰好排队时才巧合。

Windows将消息发送到您的应用程序,以便您可以可靠地处理事件。如果点击鼠标按钮,您的窗口将会收到WM_LBUTTONDOWNWM_LBUTTONUP

要么找到自己处理这些消息的方法,要么弄清楚你的框架如何转发这些事件。

答案 1 :(得分:0)

最可靠的是使用消息。操作系统在事件发送时发送消息,例如。发生鼠标单击或按下/释放键盘上的按钮。

因此,如果您查看“Windows消息循环”,您可能会喜欢这个答案。晚上我首先要接受它,但它是Windows编程的每一个好知识。