MFC画线

MFC画线:
1、画线:
   1)DrawView.h中:
      定义CPoint m_ptOrign;
      DrawView.cpp中:

      在DrawView的OnLButtonDown消息中,      //鼠标按下消息
      保存鼠标左键按下的point。  m_ptOrign = point;

      在DrawView的OnLButtonUp消息中,        //鼠标弹起消息
    i)
      SDK模式:
      HDC hDC;
      hDC = ::GetDC(m_hWnd);                  //此处要用全局的::GetDC,否则默认用CDC的。
      MoveToEx(hDC, m_ptOrign.x, m_ptOrign.y, NULL);  //MoveToEx。先移到初始点,然后再画线
      LineTo(hDC, point.x, point.y);
      ::ReleaseDC(m_hWnd, hDC);               //释放也要用全局::ReleaseDC。

      MFC模式:(包含画笔)
      CDC *pDC = GetDC();
      CPen pen(PS_SOLID, 5, RGB(255,0,0));
      CPen *pOldPen = pDC->SelectObject(&pen);  //将pen选入设备描述表
      pDC->MoveTo(m_ptOrign);
      pDC->LineTo(point);
      pDC->SelectObject(pOldPen);               //返还旧画笔
      ReleaseDC(pDC);

      CClientDC dc(GetParent());   //CClientDC,继承自CDC,不需要手动GetDC和ReleaseDC,传递this或GetParent()
      CPen pen(PS_SOLID, 5, RGB(255,0,0));
      CPen *pOldPen = dc.SelectObject(&pen);
      dc.MoveTo(m_ptOrign);
      dc.LineTo(point);
      dc.SelectObject(pOldPen);

      CWindowDC dc(GetDesktopWindow());  //CWindowDC继承自CDC,包含客户区和非客户区。GetDesktopWindow()获取桌面
      CPen pen(PS_SOLID, 5, RGB(255,0,0));
      CPen *pOldPen = dc.SelectObject(&pen);
      dc.MoveTo(m_ptOrign);
      dc.LineTo(point);
      dc.SelectObject(pOldPen);

      画刷:
      CBrush brush(RGB(255,0,0));
      CClientDC dc(this);                 //CClientDC传递this
      dc.FillRect(CRect(m_ptOrign, point), &brush);      //FillRect填充

      透明画刷:
      CClientDC dc(this);
      CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //创建透明画刷
      CBrush *pOld = dc.SelectObject(pBrush);
      dc.Rectangle(CRect(m_ptOrign, point));     //画矩形
      dc.SelectObject(pOld);                     //最后返还画刷

2. 实现画笔功能,连续画线
   1)在DrawView.h中,添加BOOL m_bDraw;
   2)在DrawView.cpp中,
      OnLButtonDown消息中:m_bDraw = TRUE;
      OnLButtonUp消息中:m_bDraw = FALSE;
      OnMouseMove消息中:
        CClientDC dc(this);
 CPen pen(PS_SOLID, 5, RGB(255,0,0));
 CPen *pOldPen = dc.SelectObject(&pen);
 if (m_bDraw)
 {
  dc.MoveTo(m_ptOrign);
  dc.LineTo(point);
  m_ptOrign = point;       //移动点坐标。必需的
 }
 dc.SelectObject(pOldPen);        //返还画笔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值