1。程序有画直线,圆,和矩形的功能,我想在点了橡皮擦菜单项后擦掉所画的图形,请问算法怎样实现? 来个程序段或者网址都可以
其中每画一个直线,圆,或矩形,我都分别把它们的坐标保存在各自的 CArray<CPoint,CPoint> 里。
2. 为什么不能透明画图,如:画两个矩形的话,下面的那个就被盖住了,程序选段如下:void CdrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
if(GetCapture()!=this)
return ;
if(draw_Type==d_Nothing)
return ; // //程序刚开始时没有选定绘图类型,所以不做任何操作。
CdrawDoc* pDoc = GetDocument();
CClientDC dc(this) ;
CPen *pOldPen=dc.SelectObject(pDoc->GetCurrentPen()) ;
dc.SetBkMode(TRANSPARENT) ; /// 这里设置了透明还是不行???
switch(draw_Type) // draw_Type 是个枚举
{
case d_Line:
dc.MoveTo(m_ptPrev) ;
dc.LineTo(point) ;
m_pLineCur->m_pointArray.Add(point) ;
break ;
case d_Rectangle:
dc.Rectangle(m_ptPrev.x,m_ptPrev.y,point.x,point.y) ;
m_pRectangleCur->m_pointArray.Add(point) ;
break ;
default:
break ;
}
dc.SelectObject(pOldPen) ;
ReleaseCapture() ;
// CView::OnLButtonUp(nFlags, point);
}Thanks!
其中每画一个直线,圆,或矩形,我都分别把它们的坐标保存在各自的 CArray<CPoint,CPoint> 里。
2. 为什么不能透明画图,如:画两个矩形的话,下面的那个就被盖住了,程序选段如下:void CdrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
if(GetCapture()!=this)
return ;
if(draw_Type==d_Nothing)
return ; // //程序刚开始时没有选定绘图类型,所以不做任何操作。
CdrawDoc* pDoc = GetDocument();
CClientDC dc(this) ;
CPen *pOldPen=dc.SelectObject(pDoc->GetCurrentPen()) ;
dc.SetBkMode(TRANSPARENT) ; /// 这里设置了透明还是不行???
switch(draw_Type) // draw_Type 是个枚举
{
case d_Line:
dc.MoveTo(m_ptPrev) ;
dc.LineTo(point) ;
m_pLineCur->m_pointArray.Add(point) ;
break ;
case d_Rectangle:
dc.Rectangle(m_ptPrev.x,m_ptPrev.y,point.x,point.y) ;
m_pRectangleCur->m_pointArray.Add(point) ;
break ;
default:
break ;
}
dc.SelectObject(pOldPen) ;
ReleaseCapture() ;
// CView::OnLButtonUp(nFlags, point);
}Thanks!
有2个方法:
1、实现普通的擦除功能(用指定宽度和形状的白色的刷子就可实现,
这也是我们常见的画图程序中的擦除功能)。
2、用Undo(也就是撤消当前操作),参考:
http://community.csdn.net/Expert/topic/3171/3171998.xml?temp=.8656122