我在定义的一个区域中画一条垂直标尺线,在移动鼠标时,标尺线随着鼠标移动,代码如下:void CurveDevice::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_Current_Ruler_XY=point;
DrawMoveLine(GetDC(),m_Current_Ruler_XY);
CStatic::OnMouseMove(nFlags, point);
}void CurveDevice::DrawMoveLine(CDC *pDC,CPoint point) //画鼠标移动的标尺线
{ CPen pen(PS_SOLID,1,m_RulerLineColor);
CPen *oldPen=pDC->SelectObject(&pen); pDC->SetROP2(R2_XORPEN); pDC->MoveTo(point.x , 0);
pDC->LineTo(point.x , CD_Height);
pDC->SelectObject(oldPen);
}
现在有个问题:
我移动鼠标时,以前画的线消隐得很慢,有拖尾,如何解决
{
// TODO: Add your message handler code here and/or call default
m_Current_Ruler_XY=point;
DrawMoveLine(GetDC(),m_Current_Ruler_XY);
CStatic::OnMouseMove(nFlags, point);
}void CurveDevice::DrawMoveLine(CDC *pDC,CPoint point) //画鼠标移动的标尺线
{ CPen pen(PS_SOLID,1,m_RulerLineColor);
CPen *oldPen=pDC->SelectObject(&pen); pDC->SetROP2(R2_XORPEN); pDC->MoveTo(point.x , 0);
pDC->LineTo(point.x , CD_Height);
pDC->SelectObject(oldPen);
}
现在有个问题:
我移动鼠标时,以前画的线消隐得很慢,有拖尾,如何解决
是不是在OnDraw(OnPaint)中重画线 比较好?(用InvalidateRect())
{ CEXAM016Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CPen pen(PS_SOLID,1,RGB(0,255,255));
CPen *oldPen=pDC->SelectObject(&pen);
pDC->MoveTo(x , y);
pDC->LineTo(x , 300);
pDC->SelectObject(oldPen);
}void CEXAM016View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
x=point.x;
y=point.y;
Invalidate(); CView::OnMouseMove(nFlags, point);
}
在这里你应该不用异或(SetROP2(R2_XORPEN);)的方法,而应该直接用覆盖的方法画,效率不会有问题的。