为啥我无法获得 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 测试时无法获得回溯(以防出错)?