-1

出于某种原因,使用 SetCapture 函数会导致 PtInRect() 函数不起作用!

这是一些代码:

POINT curmouse;
RECT testrect = {0, 0, 200, 200};

WM_LBUTTONDOWN:
if (MK_LBUTTONDOWN == true)
SetCapture(hWnd);
break;

WM_MOUSEMOVE:
curmouse.x = LOWORD(lParam);
curmouse.y = HIWORD(lParam);

WM_LBUTTONUP:
if (PtInRect(&testrect , curmouse))
//Draw Image

请注意:我没有在 WM_LBUTTONUP 上调用释放捕获。实际上,永远不会调用 releasecapture!

如果我不调用 setcapture,那么 ptinrect 在鼠标释放时会按预期工作。

有人可以告诉我如何让 ptinrect 与被调用的 setcapture() 一起工作吗?

最重要的是,该程序中有两个单独的窗口。第一个窗口名为 bg_window,第二个名为 other_window。

4

2 回答 2

2

你只是在初始化curmouseWM_MOUSEMOVE而不是WM_LBUTTONUP- 所以当你实际按下按钮时那里的值将是随机的。

于 2013-03-18T23:06:02.133 回答
0

SetCapture() 将鼠标消息限制在传递句柄的窗口中。除非您调用 ReleaseCapture(),否则无法解释另一个窗口上的鼠标消息。使用 SetCapture() 并且从不调用 ReleaseCapture() 不是一个好的编码习惯。

如果您的矩形在另一个窗口中,则 PtInrect 将无法正常工作。此外,如果您想知道用户是否单击了矩形区域,您可以使用在 WM_LBUTTONDOWN 消息期间获得的鼠标点。

于 2013-03-22T12:01:57.563 回答