我存储画图元素的数据类class draw{ //线
public:
COLORREF pcolor;
int pstyle;
int psize;
CList<CPoint>line;
void addpoint(CPoint p)
{
line.AddTail(p);
}
void modifypstyle(int i)
{
pstyle=i;
}
void modifypsize(int i)
{
psize=i;
}
void modifypcolor(COLORREF i)
{
pcolor=i;
}
draw&operator=(draw i)
{
pcolor=i.pcolor;
psize=i.psize;
pstyle=i.pstyle;
//line=i.line;
return *this;
}
draw(){};
draw(const draw&i) /* 内部建立CList时要改写拷贝和赋值函数,否则会调用COnject的私有赋值和拷贝函数出错*/
{
pcolor=i.pcolor;
psize=i.psize;
pstyle=i.pstyle;
POSITION head=i.line.GetHeadPosition();
while(head<i.line.GetTailPosition())
{
line.AddTail(i.line.GetNext(head));
}
};
};class pic//线集合
{
public:
CList<draw>pl;
pic&operator=(pic)
{
return *this;
}
pic(){};
pic(const pic&);
void add(const draw l)
{
pl.AddTail(l);
}
};penline为pic线集合类型
在单击左键时:cflag=true;//判断左建按下
oldpoint=point;
draw i;
i.addpoint(point);
i.modifypcolor(color);
i.modifypstyle(pstyle);
i.modifypsize(psize);CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&point);//转换设备坐标i.line.AddTail(point);
penline.add(i);鼠标移动时if(cflag)
{
CClientDC dc(this);
dc.SelectObject(&m_pen);
dc.MoveTo(oldpoint);
dc.LineTo(point);oldpoint=point;
OnPrepareDC(&dc);
dc.DPtoLP(&oldpoint);
draw&i=penline.pl.GetTail();i.line.AddTail(point);
}画是没问题,不过刷新就没了
这是ondraw函数
CClientDC dc(this);if(!penline.pl.IsEmpty())
{POSITION plwei=penline.pl.GetHeadPosition();
draw i=penline.pl.GetHead();
while(plwei<penline.pl.GetTailPosition())
{CPen pen;
pen.CreatePen(i.pstyle,i.psize,i.pcolor);
POSITION wei=i.line.GetHeadPosition();
CPoint cpoin=i.line.GetNext(wei);
dc.SelectObject(&pen);while(wei<i.line.GetTailPosition())
{
dc.MoveTo(cpoin);
CPoint cpoinnew=i.line.GetNext(wei);dc.LineTo(cpoinnew);
cpoin=cpoinnew;
}pen.DeleteObject();i=penline.pl.GetNext(plwei);
}一直搞不清楚为啥呢,求助啊
public:
COLORREF pcolor;
int pstyle;
int psize;
CList<CPoint>line;
void addpoint(CPoint p)
{
line.AddTail(p);
}
void modifypstyle(int i)
{
pstyle=i;
}
void modifypsize(int i)
{
psize=i;
}
void modifypcolor(COLORREF i)
{
pcolor=i;
}
draw&operator=(draw i)
{
pcolor=i.pcolor;
psize=i.psize;
pstyle=i.pstyle;
//line=i.line;
return *this;
}
draw(){};
draw(const draw&i) /* 内部建立CList时要改写拷贝和赋值函数,否则会调用COnject的私有赋值和拷贝函数出错*/
{
pcolor=i.pcolor;
psize=i.psize;
pstyle=i.pstyle;
POSITION head=i.line.GetHeadPosition();
while(head<i.line.GetTailPosition())
{
line.AddTail(i.line.GetNext(head));
}
};
};class pic//线集合
{
public:
CList<draw>pl;
pic&operator=(pic)
{
return *this;
}
pic(){};
pic(const pic&);
void add(const draw l)
{
pl.AddTail(l);
}
};penline为pic线集合类型
在单击左键时:cflag=true;//判断左建按下
oldpoint=point;
draw i;
i.addpoint(point);
i.modifypcolor(color);
i.modifypstyle(pstyle);
i.modifypsize(psize);CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&point);//转换设备坐标i.line.AddTail(point);
penline.add(i);鼠标移动时if(cflag)
{
CClientDC dc(this);
dc.SelectObject(&m_pen);
dc.MoveTo(oldpoint);
dc.LineTo(point);oldpoint=point;
OnPrepareDC(&dc);
dc.DPtoLP(&oldpoint);
draw&i=penline.pl.GetTail();i.line.AddTail(point);
}画是没问题,不过刷新就没了
这是ondraw函数
CClientDC dc(this);if(!penline.pl.IsEmpty())
{POSITION plwei=penline.pl.GetHeadPosition();
draw i=penline.pl.GetHead();
while(plwei<penline.pl.GetTailPosition())
{CPen pen;
pen.CreatePen(i.pstyle,i.psize,i.pcolor);
POSITION wei=i.line.GetHeadPosition();
CPoint cpoin=i.line.GetNext(wei);
dc.SelectObject(&pen);while(wei<i.line.GetTailPosition())
{
dc.MoveTo(cpoin);
CPoint cpoinnew=i.line.GetNext(wei);dc.LineTo(cpoinnew);
cpoin=cpoinnew;
}pen.DeleteObject();i=penline.pl.GetNext(plwei);
}一直搞不清楚为啥呢,求助啊
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货