孙鑫mfc 4.简单绘图


void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 m_ptOrigin = point;
 m_bDraw = true;
 CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
//  //1.利用SDK全局函数实现画线功能
//  //首先获得窗口的设备描述表
//  HDC hdc;
//  hdc = ::GetDC(m_hWnd);   //获得设备描述表句柄,平台sdk函数必须加::,否则被认为是CWnd函数
//       //CWnd类都有一个成员变量m_hWnd保存窗口句柄,CDrawView继承CWind因此同样有m_hWnd
//  //移动到线条的起点
//  MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
//  //画线
//  LineTo(hdc, point.x, point.y);
//  //释放设备描述表
//  ::ReleaseDC(m_hWnd,hdc);
//  //2.利用mfc的CDC类实现画线功能
//  CDC * pDc;   
//  pDc = GetDC();  //获得当前窗口的设备描述表指针
//  pDc->MoveTo(m_ptOrigin);
//  pDc->LineTo(point);
//  ReleaseDC(pDc);
// //3.利用mfc的CClientDC类实现画线功能
// //CClientDC派生于CDC类,可自动获取,释放设备描述表资源
//  CClientDC dc(this);  //构造函数需要一个CWnd指针
//  // CClientDC dc(GetParent()); //获得View的父窗口句柄也就是Frame,此时画线可以画到工具栏内
//  dc.MoveTo(m_ptOrigin);
//  dc.LineTo(point);
//  //4.利用mfc的CWindowDC类实现画线功能
// //CWindowDCC派生于CDC类,也可自动获取,释放设备描述表资源
//  CWindowDC dc(this);
//  //CWindowDC dc(GetParent()); //此时可以将线画到菜单栏,标题栏
//  //CWindowDC dc(GetDesktopWindow()); //获得桌面窗口句柄
//  dc.MoveTo(m_ptOrigin);
//  dc.LineTo(point);
//  //5.改变画笔颜色
//  CPen pen(PS_SOLID,10,RGB(255,0,0));
//  CClientDC dc(this);
//  CPen *pOldPen = dc.SelectObject(&pen); //将画笔选择到设备描述表中
//  dc.MoveTo(m_ptOrigin);
//  dc.LineTo(point);
//  dc.SelectObject(pOldPen); //画完后改为最初的画笔
 
//  //6.画刷创建
//  CBrush brush(RGB(0,255,0));
//  CClientDC dc(this);
//  dc.FillRect(CRect(m_ptOrigin,point),&brush);//此处用指定的画刷去填充,
//             //所以不需要将画刷选择到设备描述表
//  //7.位图画刷
//  //事先插入资源类型为bitmap的位图(id为IDB_BITMAP1)
//  CBitmap bitmap;
//  bitmap.LoadBitmap(IDB_BITMAP1);
//  CClientDC dc(this);
//  CBrush brush(&bitmap); //用bitmap创建画刷
//  dc.FillRect(CRect(m_ptOrigin,point),&brush);
//  //8.画矩形
//  CClientDC dc(this);
//  dc.Rectangle(CRect(m_ptOrigin,point));//画矩形函数,此时如果矩形重合,新矩形会覆盖原矩形的边
//             //原因是由于默认画刷为白色且会自动填充矩形内部
//  //9.画内部透明的矩形
//  CClientDC dc(this);
//  CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
//      // GetStockObject函数返回类型为HGDIOBJ,需强制转换为FromHandle的参数类型HBRUSH
//   CBrush* pOldBrush= dc.SelectObject(pBrush); //下面画矩形的函数中不能指定画刷,所以需要为设备描述表选择画刷
//  dc.Rectangle(CRect(m_ptOrigin,point));
//  dc.SelectObject(pOldBrush);
//  //dc.FillRect(CRect(m_ptOrigin,point),pBrush); //如果不是选择画刷再画矩形,直接通过这种方式是画不出矩形边框的
 //10.画曲线相关
 m_bDraw = false;
 CView::OnLButtonUp(nFlags, point);
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
 CClientDC dc(this);
 if (true == m_bDraw) //判断鼠标是否已经按下
 {
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  m_ptOrigin = point;  //将起始点 改为现在鼠标的位置
 }
 CView::OnMouseMove(nFlags, point);
}

你可能感兴趣的:(职场,mfc,绘图,休闲)