移动一个矩形时遇到的有关问题
移动一个矩形时遇到的问题
我在收到WM_LBUTTONDOWN事件时,记住了鼠标单击的坐标,如下:
xBegin = LOWORD(lParam);
yBegin = HIWORD(lParam);
然后在收到WM_MOUSEMOVE事件时,移动矩形,如下:
xEnd = LOWORD(lParam);
yEnd = HIWORD(lParam);
MoveRect(xEnd - xBegin, yEnd - yBegin);
InvalidateRect(hwnd, NULL, TRUE);
RedrawRect();
其中MoveRect函数是改变矩形的左上角与右下角的坐标值,如下:
void MoveRect(int iXOffset, int iYOffset)
{
m_iPositionBeginX += iXOffset;
m_iPositionEndX += iXOffset;
m_iPositionBeginY += iYOffset;
m_iPositionEndY += iYOffset;
}
RedrawRect()是重新画矩形。
现在的问题是,当我移动鼠标时,矩形的确也移动,但矩形移动的
速度远远大于鼠标移动的速度,一下子,矩形就移动到用户区之外,看不到了,
关于映射模式与坐标原点,我都是使用的默认值。
不知道问题出在什么地方,请知道的指点一下!
------解决方案--------------------
在mousemove里移动矩形后,重新设置xBegin,
yBegin为当前的鼠标点
------解决方案--------------------
在mousemove里移动矩形后,重新设置xBegin,
yBegin为当前的鼠标点
===================================================
恩,就是这个问题,因为iPositionBeginX 和iPositionBeginY 始终是WM_LBUTTONDOWN的值
每次调用这个函数都会将矩形坐标移动从当前点到这个原始点这么多位移动
也就是说每次触发WM_MOUSEMOVE都会触发一次,位移动会不断累积
我在收到WM_LBUTTONDOWN事件时,记住了鼠标单击的坐标,如下:
xBegin = LOWORD(lParam);
yBegin = HIWORD(lParam);
然后在收到WM_MOUSEMOVE事件时,移动矩形,如下:
xEnd = LOWORD(lParam);
yEnd = HIWORD(lParam);
MoveRect(xEnd - xBegin, yEnd - yBegin);
InvalidateRect(hwnd, NULL, TRUE);
RedrawRect();
其中MoveRect函数是改变矩形的左上角与右下角的坐标值,如下:
void MoveRect(int iXOffset, int iYOffset)
{
m_iPositionBeginX += iXOffset;
m_iPositionEndX += iXOffset;
m_iPositionBeginY += iYOffset;
m_iPositionEndY += iYOffset;
}
RedrawRect()是重新画矩形。
现在的问题是,当我移动鼠标时,矩形的确也移动,但矩形移动的
速度远远大于鼠标移动的速度,一下子,矩形就移动到用户区之外,看不到了,
关于映射模式与坐标原点,我都是使用的默认值。
不知道问题出在什么地方,请知道的指点一下!
------解决方案--------------------
在mousemove里移动矩形后,重新设置xBegin,
yBegin为当前的鼠标点
------解决方案--------------------
在mousemove里移动矩形后,重新设置xBegin,
yBegin为当前的鼠标点
===================================================
恩,就是这个问题,因为iPositionBeginX 和iPositionBeginY 始终是WM_LBUTTONDOWN的值
每次调用这个函数都会将矩形坐标移动从当前点到这个原始点这么多位移动
也就是说每次触发WM_MOUSEMOVE都会触发一次,位移动会不断累积