紧急高分求助:绘图操作 如何设置画刷使得调用CDC::Rectangle()函数后,矩形内部不填充(保留背景)

LeafBoy 2004-08-24 11:47:23
视图背景是一个位图。希望画矩形后,矩形内部不填充,保留背景,如何实现?
还有,如何擦除线条,恢复背景?
...全文
622 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gotopt 2004-10-14
  • 打赏
  • 举报
回复
COLORREF XorColor = pDC->GetBkColor() ^ GetPenColor();

如何获得GetPenColor(), DC中没有此函数呀??
zhaogaojian 2004-08-25
  • 打赏
  • 举报
回复
没关系,XOR画笔不会影响背景,你在背景上画一条线遮挡背景,第二次再画上一条线
原来的背景就又显示出来了
0001 原来背景
画笔1010
1:1011
2:XOR 1011+1010=0001;恢复背景
csdn_cht 2004-08-24
  • 打赏
  • 举报
回复
记得保存选出的画刷,用完恢复哦。!
csdn_cht 2004-08-24
  • 打赏
  • 举报
回复
flyelf(空谷清音)正解
选中系统库存画刷:
pDC->SelectObject(GetStockObject(NULL_BRUSH);或
pDC->SelectObject(GetStockObject(HOLLOW_BRUSH);都行
flyelf 2004-08-24
  • 打赏
  • 举报
回复
pDC->SelectObject(GetStockObject(NULL_BRUSH);
DentistryDoctor 2004-08-24
  • 打赏
  • 举报
回复
LOGBRUSH logBrush;
logBrush.lbStyle = NULL_BRUSH;
logBrush.lbColor = 0;
logBrush.lbHatch = 0;

// Declare an uninitialized CBrush
CBrush brush;
// and initialize it with the LOGBRUSH.
brush.CreateBrushIndirect(&logBrush);

// Select the brush, and perhaps a pen into
// the device context.
CBrush* pOldBrush = (CBrush*)pDC->SelectObject(&brush);

....

pDC->SelectObject(pOldBrush);

OK!
DentistryDoctor 2004-08-24
  • 打赏
  • 举报
回复
选择一个空的画刷!
LeafBoy 2004-08-24
  • 打赏
  • 举报
回复
to : zhaogaojian(米柑年成)

如果背景是位图,不只是一种颜色,该如何处理?谢谢
zhaogaojian 2004-08-24
  • 打赏
  • 举报
回复
擦除线条,恢复背景这个最好用异或笔操作:下面是对一个矩形的移动操作,如果擦除第二段代码不需要
CPoint point;
COLORREF XorColor = pDC->GetBkColor() ^ GetPenColor();
CPen pen(PS_DOT, 1, XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);


//首先删除原矩形
pDC->MoveTo(m_x1,m_y1);//m_x1,m_x2,m_y1,m_y2是矩形四顶点的坐标这四句话
//是擦除原来画的矩形,
pDC->LineTo(m_x2,m_y1);
pDC->LineTo(m_x2,m_y2);
pDC->LineTo(m_x1,m_y2);
pDC->LineTo(m_x1,m_y1);
//修改新图形坐标

m_x1 += x-m_oldx, m_y1 += y-m_oldy;//对距形进行移动并在新位置画矩形
m_x2 += x-m_oldx, m_y1 += y-m_oldy;
pDC->MoveTo(m_x1,m_y1);
pDC->LineTo(m_x2,m_y1);
pDC->LineTo(m_x2,m_y2);
pDC->LineTo(m_x1,m_y2);
pDC->LineTo(m_x1,m_y1);


//以下恢复DC
pDC->SetROP2(oldmode);
pDC->SelectObject(oldpen);
pen.DeleteObject();//释放笔资源
用局部更新,或位图Bitblt速度都是较慢的,而且局部更新不容易控制
月光莫利亚 2004-08-24
  • 打赏
  • 举报
回复
呵呵,画四条边也可。
qianhongchong 2004-08-24
  • 打赏
  • 举报
回复
CDC::SelectStockObject (NULL_BRUSH)
枫雁 2004-08-24
  • 打赏
  • 举报
回复
SelectStockObject(NULL_BRUSH)
zhujianping_es 2004-08-24
  • 打赏
  • 举报
回复
选择一个空的画刷!

15,979

社区成员

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

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