我存储画图元素的数据类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);
}一直搞不清楚为啥呢,求助啊

解决方案 »

  1.   

    用ondraw函数里的参数CDC *pDC来画就行了,不需要再定义CClientDC dc(this);用dc画,不过,在OnDraw函数里执行画图时应该刷新就会闪烁(就是用Invalidate()时会闪烁),除非你在OnDraw里只画一次
      

  2.   

    我改成pdc了没差多少,还是画不出来啊。
      

  3.   

    我找到错误了,我这个死白痴只记得写draw的拷贝构造要对clist重写了而忘记了赋值的对clist的重写