一、实现画线功能
步骤:
1、新建一个MFC项目“Draw1”,单文档。
2、在视图类中添加鼠标左键按下的消息处理OnLButtonDown(UINT nFlags, CPoint point)
3、在视图类中添加CPoint类型的成员变量m_ptOrigin,并在OnLButtonDown中初始化为point;
4、在视图类中添加鼠标左键弹起的消息处理OnLButtonUp(UINT nFlags, CPoint point) ,并重写该函数。
方法一:利用SDK全局函数实现
在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);
方法二:利用MFC的CDC类实现
在OnLButtonUp(UINT nFlags, CPoint point)中添加代码:
CDC *pDC = GetDC(); pDC->MoveTo(m_ptOrigin); pDC->LineTo(point); ReleaseDC(pDC);
方法三:利用MFC的CClientDC 类实现
在OnLButtonUp(UINT nFlags, CPoint point)中添加代码:
CClientDC dc(GetParent()); //每个对象都有一个this指针指向自己本身,如果把this改成GetParent()(指向父窗口指针),就可以实现在客户区画线,工具栏属于框架窗口的客户区。 dc.MoveTo(m_ptOrigin); dc.LineTo(point);
方法四:利用MFC 的CWindowDC类实现
CWindowDC dc(this); //该对象可以访问整个窗口区域,包括框架窗口的非客户区和客户区,同样道理,this也可以改成GetParent()就可以访问整个窗口了。 dc.MoveTo(m_ptOrigin); dc.LineTo(point);
在桌面窗口中画线,只要把上面的方法四中的this指针改成GetDesktopWindow()(CWnd类的成员函数,该函数可以获得整个Windows桌面窗口的句柄)