社区
图形处理/算法
帖子详情
求教高手!用CBrush画圆形或者矩形并且要填充内部区域,怎样擦除以前留下的路径??
wpyi
2003-04-11 01:33:57
见过画直线擦除以前留下的路径,但是画圆时留下的是一片阴影,如何解决这个问题。我用的程序是基于对话框的,用Invalidate()可以实现吗?而且另有个问题,当对话框拖动或者最小化后,以前画的就全没了,这又怎么解决?
...全文
230
9
打赏
收藏
求教高手!用CBrush画圆形或者矩形并且要填充内部区域,怎样擦除以前留下的路径??
见过画直线擦除以前留下的路径,但是画圆时留下的是一片阴影,如何解决这个问题。我用的程序是基于对话框的,用Invalidate()可以实现吗?而且另有个问题,当对话框拖动或者最小化后,以前画的就全没了,这又怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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里面完成,画前先清背景
visual c++中的
画
刷类
CBrush
使用实例
利用
画
笔可以
画
图形的边框,而用
画
刷就可以在图形内着色。大多数的GDI绘图函数既使用
画
笔又使用
画
刷,它们用
画
笔绘制各种图形的周边,而用
画
刷
填充
图形,因而可以用一种颜色和风格去设置
画
笔,而用另一种颜色和风格去设定
画
刷,通过一次函数调用就可以绘制出形状复杂的图形。
画
刷是由
CBrush
类管理的,创建
画
刷有两种方法:一种是调用构造函数,另一种是调用相关的成员函数。
FONT/
CBrush
/CPen/直线/圆角
矩形
/圆弧.rar
FONT/
CBrush
/CPen/直线/圆角
矩形
/圆弧
CBrush
的绘图说明
关于
CBrush
的说明 主要有绘图介绍
VS2019 GDI
CBrush
例程MFCApplicationGDI
CBrush
Demo.rar
VS2019 GDI
CBrush
例程
VC图像
填充
选区实例
VC图像
填充
选区的源码实例,实现思路:
CBrush
brush(RGB(255, 128, 128))定义一个颜色
画
刷,使用颜色
填充
区域
,加载位图,创建位图
画
刷,使用位图
填充
区域
,释放
画
刷对象,定义一个
区域
对象,绘制
矩形
边框,创建一个
矩形
选区,组合选区,获取两个选区的公共部分,将选区对象附加一个选区句柄,
填充
选区,释放选区句柄等。 运行环境:Windows/Visual C/C++
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章