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!
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!
选中系统库存画刷:
pDC->SelectObject(GetStockObject(NULL_BRUSH);或
pDC->SelectObject(GetStockObject(HOLLOW_BRUSH);都行
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速度都是较慢的,而且局部更新不容易控制
原来的背景就又显示出来了
0001 原来背景
画笔1010
1:1011
2:XOR 1011+1010=0001;恢复背景