MFC中用CDC类重绘问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 22:59:41
用CDC完成类似于windows画板中铅笔的功能,如何能在窗口的我时候继续保留我所画的东西?下面是我使用的方法,铅笔功能能完成,不过界面放大缩小的过程中并不能保留我所画出来的图形。请达人说明我用的方法错误的地方。我是一个VC的刚刚入门的菜鸟。
以下代码均写在CView类中:
在类头文件中定义私有变量 BOOL fg;CPoint pt1;CPoint pt2;
在WM_LBUTTONDOWN消息处理函数中(point为鼠标按下时所在的坐标点) fg=TRUE;pt1=point;
在WM_LBUTTONUP消息处理函数中 fg=FALSE;
在WM_MOUSEMOVE消息处理函数中(point为鼠标移动一个像素之后产生的点)
if(fg==TRUE)
{pt2=point;
CClientDC dc(this);
OnDraw(&dc);//CClientDC继承于CDC类,所以我在这里传了一个子类的dc
pt1=pt2;
}
在OnDraw函数中
if(fg==TRUE)
{
pDC->MoveTo(pt1);
pDC->LineTo(pt2);
}//完成
并且类似的我也试过用OnPaint()来处理,画图部分,不过连线都画不出来。

你先定义一个线段类CLine,在其头文件中定义pt1和pt2,并定义一个成员函数DrawLine(),代码如下:
class CLine : public CObject
{
private:
CPoint pt1;
CPoint pt2;
public:
CLine(CPoint p1, CPoint p2);
virtual ~CLine();
void DrawLine(CDC *pDC);
};

在实现文件Line.cpp中编写如下代码:
CLine::CLine(CPoint p1, CPoint p2)
{
pt1=p1;
pt2=p2;
}

void CLine::DrawLine(CDC *pDC)
{
pDC->MoveTo(pt1);
pDC->LineTo(pt2);
}

要使用一个动态数组来保存已画好的线段,为此在文档类C***Doc的头文件中定义下面的成员变量和成员函数,并包含定义类Line的头文件:
#include "Line.h"
#include <afxtempl.h> //使用MFC类模板
class C***Doc : public CDocument
{
……
protected:
CTypedPtrArray<CObArray,CLine *> m_LineArray; //存放线段对象指针的动态数组
public:
CLine * GetLine(int nIndex);
void AddLine(CPoint p1, CPoint p2);
int GetNumLines();
……
};

在实现源文件***Doc.cpp中编写如下代码:
void C***Doc::AddLine(CPoint p1, CPo