为啥我无法获得 RightMouseButton 输入?

Posted

技术标签:

【中文标题】为啥我无法获得 RightMouseButton 输入?【英文标题】:Why can't I get the RightMouseButton Input?为什么我无法获得 RightMouseButton 输入? 【发布时间】:2014-04-23 11:47:42 【问题描述】:

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

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);
    

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

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

【问题讨论】:

你应该确保你没有粘贴制表符来缩进,否则你的代码看起来很疯狂。 考虑到您的整个代码块都需要按下左键,您期望会发生什么? if (wParam & MK_LBUTTON) 在顶部... 对不起,我想重构,但它告诉我有人编辑了它:D 你应该如何检测鼠标左键 if 语句中的鼠标右键?? 抱歉@nico,我最终抹掉了代码更改吗?我想我格式化了原始帖子。 【参考方案1】:

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);

【讨论】:

仍然是右键不工作:(。我以前试过。 没有足够的信息来确定问题。尝试从它周围发布更多代码。 嗯,这是执行操作的代码。我有 drawBezier 函数,我在其中绘制曲线,仅此而已。所有这些代码也都在 WM_MOUSEMOVE 案例中 如果我用 LBUTTON 代替 RBUTTON ,它就可以工作了。太奇怪了。 if ((wParam & MK_LBUTTON) || (wParam & MK_RBUTTON)) 也可以写成if (wParam & (MK_LBUTTON | MK_RBUTTON))。另外,the documentation 表示使用GET_X_LPARAM()GET_Y_LPARAM() 而不是使用LOWORD()HIWORD(),否则您的代码将无法在多显示器系统上正常工作。

以上是关于为啥我无法获得 RightMouseButton 输入?的主要内容,如果未能解决你的问题,请参考以下文章

为啥没有滚动条我无法获得容器宽度?

为啥我无法获得 /comments/new.html.erb?

Django:为啥我在运行 LiveServerTestCase 测试时无法获得回溯(以防出错)?

为啥我无法获得 select2 下拉列表的先前值

为啥我无法通过 Prolog 获得 Ship Puzzle 的答案?

为啥我无法获得对地图中某个值的引用? [复制]