几种画直线的方法-孙鑫C++笔记

// HDC画直线

CPoint m_ptOrigin ;

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  HDC hdc;

  hdc = ::GetDC(m_hWnd);

  MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, NULL);

  LineTo(hdc, point.x, point.y);

  ::ReleaseDC(m_hWnd, hdc);



  CView::OnLButtonUp(nFlags, point);

}



// CDC画直线

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  CDC *pDC = GetDC();

  pDC->MoveTo(m_ptOrigin);

  pDC->LineTo(point);

  ReleaseDC(pDC);



  CView::OnLButtonUp(nFlags, point);

}



// CClientDC、CWindowDC画直线

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  CClientDC dc(this);          //画到客户区

  CClientDC dc(GetParent());      //画到客户区+工具栏

  CWindowDC dc(this);          //画到客户区

  CWindowDC dc(GetParent());  //画到客户区+工具栏+菜单栏+标题栏

  CWindowDC dc(GetDesktopWindow());  //画到整个屏幕窗口

  dc.MoveTo(m_ptOrigin);

  dc.LineTo(point);



  CView::OnLButtonUp(nFlags, point);

}



//带颜色的直线

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  CPen pen(PS_SOLID, 1, RGB(255, 0, 0));

  CClientDC dc(this);

  CPen *pOldPen = dc.SelectObject(&pen);

  dc.MoveTo(m_ptOrigin);

  dc.LineTo(point);

  dc.SelectObject(pOldPen);



  CView::OnLButtonUp(nFlags, point);

}



//画刷

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  CBrush brush(RGB(255, 0, 0));

  CClientDC dc(this);

  dc.FillRect(CRect(m_ptOrigin, point), &brush);



  CView::OnLButtonUp(nFlags, point);

}

//位图画刷

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  CBitmap bitmap;

  bitmap.LoadBitmap(IDB_BITMAP1);

  CBrush brush(&bitmap);

  CClientDC dc(this);

  dc.FillRect(CRect(m_ptOrigin, point), &brush);



  CView::OnLButtonUp(nFlags, point);

}

//透明画刷

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  CClientDC dc(this);

  // dc.Rectangle(CRect(m_ptOrigin, point)); //不透明

  CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

  CBrush *pOldBrush = dc.SelectObject(pBrush);

  dc.Rectangle(CRect(m_ptOrigin, point));

  dc.SelectObject(pOldBrush);    //透明



  CView::OnLButtonUp(nFlags, point);

}

//用画笔写字

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = point;

  m_bDraw = TRUE;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  m_bDraw = FALSE;

  CView::OnLButtonUp(nFlags, point);

}

void CDrawView::OnMouseMove(UINT nFlags, CPoint point)

{

  CClientDC dc(this);

  CPen pen(PS_SOLID, 1, RGB(255, 0, 0));

  CPen *pOldPen = dc.SelectObject(&pen);

  if(m_bDraw == TRUE)\

  {

    dc.MoveTo(m_ptOrigin);

    dc.LineTo(point);

    m_ptOrigin = point;

  }

  dc.SelectObject(pOldPen);

  

  CView::OnMouseMove(nFlags, point);

}



//画扇形

CPoint m_ptOld;

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)

{

  m_ptOrigin = m_ptOld = point;

  m_bDraw = TRUE;

  CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

  m_bDraw = FALSE;

  CView::OnLButtonUp(nFlags, point);

}

void CDrawView::OnMouseMove(UINT nFlags, CPoint point)

{

  CClientDC dc(this);

  CPen pen(PS_SOLID, 1, RGB(255, 0, 0));

  CPen *pOldPen = dc.SelectObject(&pen);

  if(m_bDraw == TRUE)\

  {

    dc.MoveTo(m_ptOrigin);

    dc.LineTo(m_ptOld);

    // dc.MoveTo(m_ptOrigin); // 不带边线

    dc.MoveTo(m_ptOld);    // 带边线

    dc.LineTo(point);

    m_ptOld = point;

  }

  dc.SelectObject(pOldPen);



  CView::OnMouseMove(nFlags, point);

}

 

你可能感兴趣的:(C++)