求教高手!用CBrush画圆形或者矩形并且要填充内部区域,怎样擦除以前留下的路径??

wpyi 2003-04-11 01:33:57
见过画直线擦除以前留下的路径,但是画圆时留下的是一片阴影,如何解决这个问题。我用的程序是基于对话框的,用Invalidate()可以实现吗?而且另有个问题,当对话框拖动或者最小化后,以前画的就全没了,这又怎么解决?
...全文
230 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wpyi 2003-04-13
  • 打赏
  • 举报
回复
那另外一个问题,当对话框拖动或者最小化后,以前画的就全没了,这又怎么解决?
wrcluomo 2003-04-12
  • 打赏
  • 举报
回复
接着骗分:
if(!(m_HLine||m_VLine||m_HVLine||m_BendLine||m_Rectangle||m_Circle1))return;
if(!m_FirstClick) return;
CPoint ScrollPoint;
ScrollPoint=GetScrollPosition();
//point.x+=ScrollPoint.x;
//point.y+=ScrollPoint.y;
CDC * pdc;
pdc=GetDC();
CPen pen,*OldPen;
pen.CreatePen(PenStyle,PenWidth,m_PenColor); //PS_SOLID
OldPen=pdc->SelectObject(&pen);
if(!m_BendLine)
SetCursor(LoadCursor(NULL,IDC_CROSS));
m_OldDrawMode=pdc->SetROP2(R2_NOTXORPEN);//重画时可以擦除原来的画线
m_End=point;

//画斜线
if(m_HVLine)
{
//擦去上次的画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_OldEnd.x ,m_OldEnd.y );
//重新绘画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_End.x ,m_End.y );
}
//画水平线
if(m_HLine)
{
//擦去上次的画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_OldEnd.x ,m_Begin.y );
//重新绘画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_End.x ,m_Begin.y );
}
//画竖直线
if(m_VLine)
{
//擦去上次的画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_Begin.x ,m_OldEnd.y );
//重新绘画
pdc->MoveTo(m_Begin.x ,m_Begin.y );
pdc->LineTo(m_Begin.x ,m_End.y );
}
//画矩形
if(m_Rectangle)
{
//擦去上次的画
pdc->Rectangle(CRect(m_Begin,m_OldEnd));
//重新绘画
pdc->Rectangle(CRect(m_Begin,m_End));
}
m_OldEnd=m_End;
pdc->SelectObject(OldPen);
ReleaseDC(pdc);
pen.DeleteObject();
CPoint m_Begin在LBUTTONDOWN中第一次单击时取得。
最后一次重画要在lBUTTONDOWN中画要不填充则设置OldBrush=(CBrush*)pdc->SelectStockObject(NULL_BRUSH);//创建一个不填充的画刷,否则选一个别的。

shaolunyuan 2003-04-12
  • 打赏
  • 举报
回复
获取矩形区域。

使用划刷填充不行吗?

呵呵。思路简单的很 !!!!

另外,使用 updatedata(true) 和 (false)

wpyi 2003-04-12
  • 打赏
  • 举报
回复
画的圆有填充,怎么办?
菜牛 2003-04-12
  • 打赏
  • 举报
回复
要保存原来的那个圆的数据,在OnPaint()里必须把所有的圆在绘制一遍。
数据可以保存在Document里。
wangxjlb 2003-04-11
  • 打赏
  • 举报
回复
用invalidate可以的.以前画的没有了那是因为没有保存下来.
wpyi 2003-04-11
  • 打赏
  • 举报
回复
在OnPaint里不行的,因为我要求能看到画圆的过程,所以必须在MouseMove里完成。
用Invalidate有个问题,就是当画完一个圆,再画一个圆时,会把原来的那个也擦掉。如何解决。
free_card 2003-04-11
  • 打赏
  • 举报
回复
up
sunyard 2003-04-11
  • 打赏
  • 举报
回复
如果画图算法不是很复杂,把全部的画图代码都放在OnPaint里面完成,画前先清背景

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧