我正在使用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都不能正常工作。有什么想法吗?
使用左键我可以调整左边的线,右边的按钮可以调整右边的线。但在这种情况下,永远不会得到正确的按钮。
答案 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);
}