MFC中鼠标拖动矩形和改变矩形大小问题
我想实现拖动已画的矩形,下面是自己写的代码
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);
}
问题是拖动的时候不是平缓连续的,而且会有很多矩形出现,而不是只有原来的那个矩形在移动。
请大家帮我找找原因。
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);
}
问题是拖动的时候不是平缓连续的,而且会有很多矩形出现,而不是只有原来的那个矩形在移动。
请大家帮我找找原因。
...全文
相关推荐
VC.NET对话框控件拖拉改变大小
摘要:VC/C++源码,界面编程,对话框 对话框控件拖拉改变大小,的实现,仅供参考,暂无窗体演示截图。
VS2012环境下MFC鼠标拖动绘制矩形示例
MFC(Microsoft Foundation Classes)是微软提供的一套用于简化Windows应用程序开发的C++类库。MFC封装了大部分Windows API函数,以面向对象的形式提供给开发者,极大提高了Windows应用的开发效率和代码的可复用性。CDC类是MFC(Microsoft Foundation Classes)中用于管理设备上下文(Device Contexts, DC)的抽象基类。设备上下文作为图形绘制的枢纽,它封装了与设备有关的输出绘图操作的属性和方法。
橡皮区矩形CRectTracker C#实现VC源代码
橡皮区矩形 CRectTracker C# 实现 关键字:recttracker,window,csharp,c#
可以实现 CRectTrack 类功能的拖动类,可以移动拖动直线,可拖动普通 CObject 对象.zip
可以实现 CRectTrack 类功能的拖动类,可以移动拖动直线,可拖动普通 CObject 对象.zip
GDI+绘制矩形,并且实现可旋转、缩放、移动功能(基于MFC对话框)
绘制矩形并且能够交互实现缩放、旋转、移动。里面还有绘制椭圆、箭头等功能,只是其他交互功能还未完善待续。。。。


图形处理/算法
