绘图的相关类

1.1绘图设备类

  CDC类 -- 绘图设备类,父类是CObject类。表示一般的绘图设备,如:打印机、显示器等

  CWindowDC类 -- 窗口类,父类是CDC类。表示的是窗口区域,包括客户区和非客户区。一般界面的美化会使用该类。

  CClientDC类 -- 父类是CDC类。仅表示的是窗口区域的客户区

  CPaintDC类 -- 父类是CDC类。仅表示的是窗口区域的客户区,只能在WM_PAINT的消息处理函数中使用

  CMetaFileDC类 -- 父类是CDC类。与其它DC类区别最大,用来保存一些绘制命令,以便以后调用

  例:Draw

  在CDrawView类中添加成员变量:CPoint m_ptOrigin

  在CDrawView的构造函数中初始化m_ptOrigin

CDrawView::CDrawView()
{
     CPoint m_ptOrigin=0;
}

   在MFC类向导中为CDrawView添加消息:WM_LBUTTONDOWN消息,双击自动生成消息响应函数OnLButtonDown

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    m_ptOrigin=point;
    
    CView::OnLButtonDown(nFlags, point);
}

   在MFC类向导中为CDrawView添加消息:WM_LBUTTONUP消息,双击自动生成消息响应函数OnLButtonUp

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    /*1、利用SDK全局函数实现画线功能
    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);
    */
    /*2、利用MFC的CDC类实现画线功能
    CDC* pDC=GetDC();
    pDC->MoveTo(m_ptOrigin);
    pDC->LineTo(point);
    ReleaseDC(pDC);
    */
    /*3、利用MFC的CClientDC类实现画线功能
    CClientDC dc(this);
    //CClientDC dc(GetParent());//可在框架窗口的客户区画线
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    */
    /*4、利用MFC的CWindowDC类实现画线功能
    CWindowDC dc(this);
    //CWindowDC dc(GetParent());//可在整个框架窗口内画线
    //CWindowDC dc(GetDesktopWindow());//可在整个屏幕窗口上画线
    dc.MoveTo(m_ptOrigin);
    dc.LineTo(point);
    */
    
    CView::OnLButtonUp(nFlags, point);
}

1.2类的使用

  1--CDC类的使用

    1)创建

      CDC::CreateDC

      virtual BOOL CreateDC(

        LPCTSTR lpszDriverName,  //设备的驱动名称

        LPCTSTR lpszDeviceName,  //设备名称

        LPCTSTR lpszOutput,      //设备接口

        const void* lpInitData   //设备的初始化参数

      );

      显示器设备:

      CreateDC("DISPLAY",NULL,NULL,NULL);

    2)在设备上绘图

    3)销毁

      CDC::DeleteDC

  2--CMetaFileDC类的使用

    1)创建

      CMetaFileDC::Create

    2)绘图命令

    3)关闭,并返回MetaFileDC的句柄

      CMetaFileDC::Close

    4)使用(可以多次使用)

      CDC::PlayMetaFile

    5)删除

      DeleteMetaFile

1.3绘图对象类

  1--CPen-画笔类

    CPen( int nPenStyle, int nWidth, COLORREF crColor );

    例:

      CClientDC dc(this);

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

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

      ......

      dc.SelectObject(pOldPen);

  2--CBrush-画刷类

    CBrush( COLORREF crColor );

    CBrush( int nIndex, COLORREF crColor );

    CBrush( CBitmap* pBitmap );

    注意:若不自定义画刷则使用默认的填充为白色的颜色画刷

    例:

      CClientDC dc(this);

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

      CBrush* pOldBrush=dc.SelectObject(&pBrush);

      ......

      dc.SelectObject(pOldBrush);

  3--CFont-字体类

  4--CBitmap-位图类

    例:创建位图画刷

      CClientDC dc(this);

      CBitmap bitmap;

      bitmap.LoadBitmap(IDB_BITMAP1);

      CBrush brush(&bitmap);

      CBrush* pOldBrush=dc.SelectObject(&pBrush);

      ......

      dc.SelectObject(pOldBrush);

  5--CPalette-调色板类

  6--CRgn-区域类

   系统引入调色板的目的:减少位图占用空间的大小

1.4绘图对象的使用

  1--画笔、画刷、字体的使用步骤

    1)构造(创建)绘图对象

    2)将绘图对象选入到当前绘图设备

    3)使用

    4)将绘图对象从当前设备中选出

    5)删除绘图对象

  2--位图的使用步骤

    将位图类的加载放入视图类的OnPaint函数中即可设置其随视图窗口大小的变化而重画

    1)使用位图对象加载位图资源

    2)创建与当前DC兼容的DC

    3)将位图选入到兼容DC

    4)将位图从兼容DC拷贝到当前DC

    5)将位图从兼容DC中选出

    6)删除兼容DC

    7)删除位图对象

  3--区域的使用步骤

    1)创建

      CRgn::CreateXXX

    2)几何运算(可以多次运算)

      CRgn::CombineRgn()

    3)填充区域

      CDC::FillRgn

      矩形填充区域:CDC::FillRect,在参数中直接提供绘制使用的画刷,不需要将画刷选入设备描述表中;

      例:

        CClientDC dc(this);

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

    4)填充区域的边框

      CDC::FrameRgn

原文地址:https://www.cnblogs.com/zhouwanqiu/p/6914710.html