有趣的现象,大家来看看.
在一个有图片背景的view上移动另一个图片,图片怎么会 "飞来飞去 " ,而不是随着鼠标的移动而移动.
void CShowDIBView::OnDraw(CDC* pDC)
{
CShowDIBDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
m_Dib.SetPalette( pDC );
m_Dib.Draw( pDC, mLeftTopPoint.x, mLeftTopPoint.y,100, 100 );
}
void CShowDIBView::OnLButtonDown(UINT nFlags, CPoint point)
{
if(mDibRect.PtInRect(point))
{isLButtonDown = true;
mStartPoint = point;
}
CView::OnLButtonDown(nFlags, point);
}
void CShowDIBView::OnLButtonUp(UINT nFlags, CPoint point)
{
isLButtonDown = false;
CView::OnLButtonUp(nFlags, point);
}
void CShowDIBView::OnMouseMove(UINT nFlags, CPoint point)
{
if(isLButtonDown)
{
mEndPoint = point;
int tCx = mEndPoint.x - mStartPoint.x;//偏移量
int tCy= mEndPoint.y - mStartPoint.y;
mLeftTopPoint.x += tCx;
mLeftTopPoint.y += tCy;
mDibRect.left = mLeftTopPoint.x; //图片所在区域
mDibRect.top = mLeftTopPoint.y;
mDibRect.right = mLeftTopPoint.x + 100;
mDibRect.bottom= mLeftTopPoint.y +100;
Invalidate();
}
CView::OnMouseMove(nFlags, point);
}
[解决办法]
你在Invalidate();前面加一句:
m_StartPoint = point;
就可以了。