有這兩個消息響應函數
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