在学习了画图(橡皮线技术一后),感觉拖拽画线不能加入颜色和线宽信息看起来不直观,而我们在Windows画图程序中不是那样的。为了在画图拖拽时能够显示选中的颜色和线宽。对于上一课的代码还需要改进一下。
以下一些变量以及其它的设置不再详细列出来了,可以参考上一课。
核心代码:
void CGraphicView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
COLORREF XorColor=dc.GetBkColor() ^ m_PenColor; //关键代码
CPen pen(PS_SOLID,m_nLineWidth,XorColor);
int oldmode=dc.GetROP2();
CPen *oldpen=dc.SelectObject(&pen);
dc.SetROP2(R2_XORPEN); //绘图模式
dc.SelectStockObject(NULL_BRUSH);
if(m_bLButton) //判断左键状态
{
switch(m_nDrawType) //绘图方式选择
{
case IDM_LINE:
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
m_ptEnd=point;
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptEnd);
break;
case IDM_Rectangle:
dc.Rectangle(CRect(m_ptOrigin,m_ptEnd));
m_ptEnd=point;
dc.Rectangle(CRect(m_ptOrigin,m_ptEnd));
break;
case IDM_Ellipse:
dc.Ellipse(CRect(m_ptOrigin,m_ptEnd));
m_ptEnd=point;
dc.Ellipse(CRect(m_ptOrigin,m_ptEnd));
break;
}
}
dc.SelectObject(oldpen);
pen.DeleteObject();
dc.SetROP2(oldmode);
CView::OnMouseMove(nFlags, point);
}