由于某些原因,使用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。
答案 0 :(得分:2)
您只是在curmouse
上初始化WM_MOUSEMOVE
,而不是WM_LBUTTONUP
- 所以当您实际按下按钮时,那里的值将是随机的。
答案 1 :(得分:0)
SetCapture()将鼠标消息限制为传递句柄的窗口。除非你调用ReleaseCapture(),否则无法解释另一个窗口上的鼠标消息。使用SetCapture()并且从不调用ReleaseCapture()不是一个好的编码实践。
如果你的矩形在另一个窗口中,则PtInrect不能正常工作。 此外,如果您想知道用户是否在rect区域中单击,您可以使用在WM_LBUTTONDOWN消息期间获得的鼠标点。