为什么我无法获得RightMouseButton输入?

时间:2014-04-23 11:47:42

标签: c++ winapi bezier win32gui

我正在使用C ++在WinApi中创建Bezier曲线,我的问题是我的右按钮不起作用。这是我的代码:

if (wParam & MK_LBUTTON)
    {
        HGDIOBJ original = NULL;

        //Saving the original object
        original = SelectObject(hdc,GetStockObject(DC_PEN));
        hdc = GetDC (hwnd) ;
        SelectObject(hdc, GetStockObject(DC_PEN));
        SetDCPenColor(hdc, RGB(246, 245, 243));
        myBezier.DrawBezier (hdc, apt) ;

        if (wParam & MK_LBUTTON)
            {
                apt[1].x = LOWORD (lParam) ;
                apt[1].y = HIWORD (lParam) ;
            }

        else if (wParam & MK_RBUTTON)
            {
                apt[2].x = LOWORD (lParam) ;
                apt[2].y = HIWORD (lParam) ;
            }

        SelectObject (hdc, GetStockObject(BLACK_PEN)) ;
        myBezier.DrawBezier (hdc, apt) ;
        ReleaseDC (hwnd, hdc) ;
        DeleteObject(original);
    }

左键完全正常工作,但我不知道为什么RightButton和其他键甚至MidButton都不能正常工作。有什么想法吗?

enter image description here

使用左键我可以调整左边的线,右边的按钮可以调整右边的线。但在这种情况下,永远不会得到正确的按钮。

1 个答案:

答案 0 :(得分:0)

if (wParam & MK_LBUTTON)确保您发布的所有代码都不会实际运行,除非按住左键。您可以按下所需的所有按钮,除非按下左按钮,否则它将永远不会进入if体内。然后您错过了检查右键的检查,因为您先检查左键。我无法知道你的意图,但我希望你能找到这样的东西:

if ((wParam & MK_LBUTTON) || (wParam & MK_RBUTTON))
{
    HGDIOBJ original = NULL;

    //Saving the original object
    original = SelectObject(hdc,GetStockObject(DC_PEN));
    hdc = GetDC (hwnd) ;
    SelectObject(hdc, GetStockObject(DC_PEN));
    SetDCPenColor(hdc, RGB(246, 245, 243));
    myBezier.DrawBezier (hdc, apt) ;

    if (wParam & MK_LBUTTON)
        {
            apt[1].x = LOWORD (lParam) ;
            apt[1].y = HIWORD (lParam) ;
        }

    else if (wParam & MK_RBUTTON)
        {
            apt[2].x = LOWORD (lParam) ;
            apt[2].y = HIWORD (lParam) ;
        }

    SelectObject (hdc, GetStockObject(BLACK_PEN)) ;
    myBezier.DrawBezier (hdc, apt) ;
    ReleaseDC (hwnd, hdc) ;
    DeleteObject(original);
}