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);
}