Setcapture导致PtInRect出现故障?

时间:2013-03-18 23:02:43

标签: c++ winapi visual-c++

由于某些原因,使用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将在鼠标释放时按预期工作。

有人可以告诉我如何使用setcapture()调用吗?

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

2 个答案:

答案 0 :(得分:2)

您只是在curmouse上初始化WM_MOUSEMOVE,而不是WM_LBUTTONUP - 所以当您实际按下按钮时,那里的值将是随机的。

答案 1 :(得分:0)

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

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