MFC中鼠标拖动矩形和改变矩形大小问题

easybf 2011-08-17 02:58:46
我想实现拖动已画的矩形,下面是自己写的代码
void CRectTView::OnRect() //菜单事件,创建一个矩形
{
// TODO: 在此添加命令处理程序代码
CClientDC dc(this);
rect = new CRect(oldpoint,botpoint);
dc.Rectangle(&rect);
m_ptrArray.Add(&rect);
}
void CRectTView::OnDraw(CDC* pDC)
{
CRectTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
for(int i=0;i<m_ptrArray.GetSize();i++)
{
pDC->Rectangle((CRect *)m_ptrArray.GetAt(i));
}
}

void CRectTView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if( (point.x<rect.left && point.x>rect.right) &&(point.y<rect.top && point.y>rect.bottom))
{
bMove = TRUE;
pointMove = point; //pointMove 为了计算偏移量声明的一个点,在这里保存鼠标按下去时的坐标
}

CView::OnLButtonDown(nFlags, point);
}

void CRectTView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
dc.SetROP2(R2_NOTCOPYPEN);
if(bMove)
{

moveX = point.x - pointMove.x;
moveY = point.y - pointMove.y;
oldpoint.x +=moveX; //oldpoint 是成员变量 rect的左顶点。
oldpoint.y +=moveY;
botpoint.x +=moveX; //botPoint rect的右下脚坐标点
botpoint.y +=moveY;

dc.Rectangle(CRect(oldpoint,botpoint));
dc.SelectStockObject(NULL_BRUSH);
Invalidate(FALSE);
}

CView::OnMouseMove(nFlags, point);
}

void CRectTView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
bMove = FALSE;
CView::OnLButtonUp(nFlags, point);
}

问题是拖动的时候不是平缓连续的,而且会有很多矩形出现,而不是只有原来的那个矩形在移动。
请大家帮我找找原因。
...全文
464 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
天鹅梦 2011-08-18
  • 打赏
  • 举报
回复
http://download.csdn.net/source/187199
天鹅梦 2011-08-18
  • 打赏
  • 举报
回复
找JTDraw例子看看吧,不是你这么干的
easybf 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ndy_w 的回复:]
一般在这样操作的时候,mousemove里擦掉上一次画的矩形,在新的位置重新画。
你的代码有点乱
if( (point.x<rect.left && point.x>rect.right) &&(point.y<rect.top && point.y>rect.bottom))居然能进去?
oldpoint,botpoint为什么累加?
[/Quote]

不好意思,怎么写会更好些呢
我才是心翼 2011-08-17
  • 打赏
  • 举报
回复
问题应该出在你的 void CRectTView::OnLButtonDown 函数吧,看if里面那一大堆,你改改
ndy_w 2011-08-17
  • 打赏
  • 举报
回复
一般在这样操作的时候,mousemove里擦掉上一次画的矩形,在新的位置重新画。
你的代码有点乱
if( (point.x<rect.left && point.x>rect.right) &&(point.y<rect.top && point.y>rect.bottom))居然能进去?
oldpoint,botpoint为什么累加?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧