有这两个消息响应函数
void CDrawlineView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

CView::OnLButtonDown(nFlags, point);

p0=p1=point;//已定义的cpoint变量
}


void CDrawlineView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(nFlags==MK_LBUTTON)
{

CClientDC dc(this);
pDefPen=dc.SelectObject (pPreviewPen);
dc.SetROP2(R2_XORPEN);   /*它不是设置当前画笔的颜色和屏幕色的组合运算得到的绘图模式,不是只是关于   颜色吗,当没有这句时,鼠标移动画出的线都会保留下来,为什么呢*/
dc.MoveTo(p0);         //这句和下面一句,当没有,鼠标移动画出的线都会保留下来,当有时,无论怎么
dc.LineTo(p1);           //移 动都只有一条直线, 为什么,我实在是想不明白,
p1=point;
dc.MoveTo (p0);
dc.LineTo (p1);
dc.SelectObject (pDefPen);
}
}

我看到一个人有说这样的话:再重画一次就擦掉了,两次异或就等于没画。,但不知是为什么。
实在是想不明白,向路过的朋友请教一下,不胜感激!


经过我多次翻书,在一本书看到这样的一段话,估且作为暂时的答案吧.
该方法先将物体的颜色与背景的颜色进行异或运算,用得到的新颜色画物体,这样做造成了有色透明物体浮于背景之上的效果,而一旦在同一位置,用同样的运算,在该区域没有画其他图形的情况下,将同一物体再画一次,却能使背景神奇的复原。
一个神奇,就OVER啦,
可以实现自抵消的效果的运算在SETROP2()有三种,
R2_NOT
R2_NOTXORPEN
R2_XORPEN