zoukankan      html  css  js  c++  java
  • 绘图的相关类

    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

  • 相关阅读:
    《家庭财务总管》升级了(1.0.0.1)
    谁拥有接口?
    VScode调试C++工程
    NVIDIA显卡原生管理查询功能nvidiasmi的部分使用功能
    python版本的两款NVIDIA显卡管理查询工具
    pytorch之网络参数统计 torchstat & torchsummary
    电脑、笔记本、手机维修经验分享网站,专业领域网站
    Python使用pynvml查看GPU信息
    【转载】 Ubuntu下使用VSCode的launch.json及tasks.json编写
    笔记本挑电源适配器吗,是不是电压相同情况下保证功率大于等于原装适配器就可以保证笔记本正常运行???
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6914710.html
Copyright © 2011-2022 走看看