MFC中实现画线的几种方法:

来源:互联网 发布:我的世界自瞄辅助js 编辑:程序博客网 时间:2024/05/21 10:09

《1》一般画线方法

首先应在View类中增加CPOINT类的一成员变量,并在构造函数中将其初始化为0。

1、利用全局函数(SDK函数)实现画线

HDC hdc; //定义DC

hdc=::GetDC(m_hWnd);

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

//m_ptOriginLBUTTONDOWN时获取的点位置

::LineTo(hdc,point.x,point.y);//画线到当前点

::ReleaseDC(m_hWnd,hdc);//释放DC

 

2、利用CDC类实现画线

CDC *pDC=GetDC();//此时利用的是CWnd的成员函数GetDC

       pDC->MoveTo(m_ptOrigin);

       pDC->LineTo(point);

       ReleaseDC(pDC);

 

3、利用CClientDC类实现画线

//构造时调用GetDC,析构时调用ReleaseDC,因此无需显式的调用GetDCReleaseDC

       CClientDC dc(this); //构造的DC仅与View类相关,画线仅能画在View窗口上

       //CClientDCdc(GetParent());

//构造的DCView类的父窗口(框架窗口)相关,画线能画在工具栏上,不能画到菜单栏上

dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);

 

4、利用CWindowDC类实现画线——也不需要显式地调用GetDCReleaseDC

//利用该类可在可在整个屏幕(包括客户区与非客户区)上画线

//CWindowDC dc(this);   //CClientDC没有区别

       //CWindowDC dc(GetParent());      //可画到菜单栏

       CWindowDC dc(GetDesktopWindow());     //可画到桌面上

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);

 

《2》画出其他颜色线条(利用画笔—CPen类)

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

//创建画笔,参数分别为笔的类型,笔的粗细,笔的颜色

       CClientDC dc(this);

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

//将新画笔的类型选择到设备描述表中,并返回原来画笔的类型

       dc.MoveTo(m_ptOrigin);

       dc.LineTo(point);

       dc.SelectObject(pOldPen);//将原先画笔的类型选择到设备描述表中

 

3》创建画刷

1、创建颜色画刷

CBrushbrush(RGB(255,0,0));

       CClientDC dc(this);

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

 

2、创建位图画刷

CBitmap bitmap;//定义位图

       bitmap.LoadBitmap(IDB_BITMAP2);//加载位图

       CBrush brush(&bitmap);//创建位图的画刷

       CClientDC dc(this);

       dc.FillRect(CRect(m_ptOrigin,point),&brush);//利用画刷填充

 

3、创建透明画刷

CClientDCdc(this);

CBrush*pBrush=CBrush

::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

//创建透明画刷(使先前画的仍能看到)

//FromHandle函数将句柄转换为C++对象,GetStockObject函数获得画刷的句柄

       CBrush *pOldBrush=dc.SelectObject(pBrush);

       dc.Rectangle(CRect(m_ptOrigin,point));//画矩形

       dc.SelectObject(pOldBrush);

 

《4》画连续的线

步骤:

1、增加一BOOL型成员变量m_bDraw,并初始化为false

2、在OnLButtonUp函数中令m_bDraw=false;在OnLButtonDown函数中令m_bDraw=true,同时获取点的位置;

3、在OnMouseMove函数中添加

CClientDC dc(this);

       if(m_bDraw==TRUE)

       {

              //dc.SetROP2(R2_BLACK);//设置绘画的模式

              dc.MoveTo(m_ptOrigin);

              dc.LineTo(point);

              m_ptOrigin=point;

       }

 

原创粉丝点击