描述:我们平时想要选择一个区域东西的时候,会用鼠标拖动选择,那个时候会有一个随着鼠标动的方框,下面的代码就是实现这个的
先说下异或笔:
R2_NOTXORPEN是C++中一种绘画模式,它先把画笔颜色与屏幕颜色异或,(这里异或是数学计算,1与1为0,1与0为1,我们说颜色其实就是二进制数,)异或之后再取反最后得到一个颜色值显示在屏幕上。
举个例子,你使用R2_NOTXORPEN这种绘画模式,你用红色画笔在黑色背景上画一条直线,显示红色,但你再用这只笔在刚画的直线上重画一遍,就相当于把开始画的红线擦除掉了,划线的地方显示为背景色
void
Clesson4View::OnMouseMove(
UINT
nFlags, CPoint point)
{
if
(m_bdraw)
{
CClientDC dc(
this
);
CBrush *pBrush=CBrush::FromHandle((
HBRUSH
)GetStockObject(NULL_BRUSH));
CBrush *PoldBrush=dc.SelectObject(pBrush);
int
oldmode=dc.SetROP2(R2_NOTXORPEN);
dc.Rectangle(CRect(m_beginpoint,m_movepoint));
m_movepoint=point;
dc.Rectangle(CRect(m_beginpoint,m_movepoint));
dc.SelectObject(PoldBrush);
dc.SetROP2(oldmode);
ReleaseDC(&dc);
}
CView::OnMouseMove(nFlags, point);
}
void
Clesson4View::OnLButtonDown(
UINT
nFlags, CPoint point)
{
m_beginpoint=point;
m_bdraw=
true
;
m_beginpoint = m_movepoint = point;
CView::OnLButtonDown(nFlags, point);
}
void
Clesson4View::OnLButtonUp(
UINT
nFlags, CPoint point)
{
m_bdraw=
false
;
CView::OnLButtonUp(nFlags, point);
}