1,首先在OnLButtonDown()中保存第一個點:
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(Start==true) //開始標志
{
CClientDC ClientDC(this);
OnPrepareDC(&ClientDC);
ClientDC.DPtoLP(&point);
PointA=point; //第一個點.
OldPoint=point; //鼠標移動過程中的上一個點.
First=true;
}
CView::OnLButtonDown(nFlags, point);
}
2.其次,在void OnMouseMove(UINT nFlags, CPoint point) 中加入以下畫圖分支結構
void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(First&&Start){
CClientDC ClientDC(this);//設備描述表
OnPrepareDC(&ClientDC);
ClientDC.DPtoLP(&point);
if(DrawStartWhat==0)
{
ClientDC.SetROP2(R2_NOTXORPEN);//生成逆轉當前屏幕顏色來畫線的繪圖方式以擦去之前畫的線
ClientDC.MoveTo(PointA);//畫反顏色線,就擦去了原來的顏色
ClientDC.LineTo(OldPoint);
ClientDC.MoveTo(PointA); //畫新的線,以下同理.
ClientDC.LineTo(point);
}
else if(DrawStartWhat==1)
{
//love you! 很多人用的是R2_NOT,但是自我感這兒用R2_NOTXORPEN較好.
ClientDC.SetROP2(R2_NOTXORPEN);//生成逆轉當前屏幕顏色來畫線的繪圖方式以擦去之前畫的圓,
OldPoint.y=OldPoint.x-PointA.x+PointA.y;//畫圓的坐標設定,注意它的斜率與PointA.y/PointA.x相同.
ClientDC.Ellipse(CRect(PointA,OldPoint));
OldPoint.x=point.x;
OldPoint.y=point.x-PointA.x+PointA.y;
ClientDC.Ellipse(CRect(PointA,OldPoint));
}
else if(DrawStartWhat==2)
{
ClientDC.SetROP2(R2_NOTXORPEN);//生成逆轉當前屏幕顏色來畫線的繪圖方式以擦去之前畫的橢圓
ClientDC.Ellipse(CRect(PointA,OldPoint));
ClientDC.Ellipse(CRect(PointA,point));
}
else if(DrawStartWhat==3)
{
ClientDC.SetROP2(R2_NOTXORPEN);//生成逆轉當前屏幕顏色來畫線的繪圖方式以擦去之前畫的矩形
ClientDC.Rectangle(CRect(PointA,OldPoint));
ClientDC.Rectangle(CRect(PointA,point));
}
OldPoint=point;
CView::OnMouseMove(nFlags, point);
}
3.最好在OnLButtonUP()中,回到初值,即可>
void CMyView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(First)
{
First=false;
}
CView::OnLButtonUp(nFlags, point);
}