zoukankan      html  css  js  c++  java
  • MFC:绘图基础

    2.1 Windows GDI

    用设备描述表(DC)来绘制图形,不同的绘画程序拥有不同的设备描述表(DC)

    //获取设备信息,屏幕的宽和高
    CClientDC dc(this);
    int cx=dc.GetDeviceCaps(HORZRES);
    int cy=dc.GetDeviceCaps(VERTRES);
     
    //获取设备信息,分辨率
    CClientDC dc(this);
    int nPlanes=dc.GetDeviceCaps(PLANES);
    int nBPP=dc.GetDeviceCaps(BITSPIXEL);
    int nColors=1<<(nPlanes*nBPP);
     
     
    //GetDeviceCaps参数
    HORZRES    以像素点数目表示的显示平面宽度
    VERTRES    以像素点数目表示的显示平面高度
    HORZSIZE    以毫米表示的显示平面宽度
    VERTSIZE    以毫米表示的显示平面高度
    LOGPIXELSX    水平方向上每逻辑英寸内像素点的数目
    LOGPIXELSY    竖直方向上每逻辑英寸内像素点的数目
    NUMCOLORS    返回静态颜色数目
    BITSPIXEL    每个像素点的位的数目
    PLANES    位平面的数目
    RASTERCAPS    设备特性标志位
    TECHNOLOGY    设备类型标志位
    

    2.2 MFC设备描述表类

    MFC绘图设备类有CDC基类,

                       派生出CPaintDC子类,用于在窗口客户区画图(仅限于OnPaint())

                                  CWindowDC子类,用于在窗口客户区画图(除了OnPaint())

                                  CClientDC子类

                                  CMetaFileDC子类

     

    2.2.1.CDC基类

    //普通函数内
    CDC* pDC=GetDC();  //CWnd::GetWindowDC
    //Do Some drawing
    ReleaseDC(pDC);
    
    //OnPaint消息内
    PAINTSTRUCT ps;
    CDC* pDC=BeginPaint(&ps);
    //Do Some Drawing
    EndPaint(&ps);
    

    2.2.2.CPaintDC子类

    //在MFC的消息映射OnPaint()之中,一定要调用CPaintDC
    //否则OnPaint消息会一直不断重复调用刷新,其中的原理在于MFC调用WinSDK之中隐藏掉了BeginPaint()和//EndPaint()两个函数
     
    CPaintDC dc(this);
     
    CPaintDC *pDC=new CPaintDC(this);
    delete pDC;
    

    2.2.3.CClientDC子类

    void CMainWindow::OnLButtonDown(UINT nFlags,CPoint point){
        
        CRect rect;
        GetClientRect(&rect);
     
        CClientDC dc(this);
        dc.MoveTo(rect.left,rect.top);
        dc.LineTo(rect.right,rect.bottom);
        dc.MoveTo(rect.right,rect.top);
        dc.LineTo(rect.left,rect.bottom);
     
        dc.Ellipse(0,0,100,100);
     
    }
    

    2.2.4.CWindowDC子类

    绘制非客户区使用,借助OnNcPaint捕获WM_NCPAINT消息(不需要调用BeginPaint和EndPaint)

    2.2.5.CMetaFileDC子类

    2.3 设备描述表属性

    设备描述表(DC)拥有文本颜色 背景颜色 背景模式  映射模式 绘图模式 当前位置 当前画笔 当前笔刷 当前字体等多种属性

    可以用SelectObject()将画笔(Pen) 画刷(Brush) 字体(Font) 位图(Bitmap) 调色板(Palette) 区域(Region)属性添加进设备描述表

    2.4 绘图模式

    GDI将像素点输出到逻辑显示平面上时,它不只是简单地将输出像素点颜色.相反它通过一系列布尔运算将输出像素点的颜色和输出目标位置上像素点的颜色合在一起.它所使用的逻辑关系由设备描述表当前的绘图模式确定

    2.5 映射模式

    2.5.1 可编程映射模式

    MM_ISOTROPIC和MM_ANISOTROPIC映射模式与其他映射模式不同,即是用户决定从逻辑坐标值转换为设备坐标值的方式

    2.5.2 坐标转换

    调用CDC::LPtoDP()可将逻辑坐标值转换为设备坐标值

    调用CDC::DPtoLP()可将设备坐标值转换为逻辑坐标值

    2.5.3 移动原点

    调用CDC::SetWindowOrg()移动窗口的原点

    调用CDC::SetViewportOrg()移动视口的原点

  • 相关阅读:
    linux下后台执行shell脚本nohup
    notepad++常用命令
    dmidecode查看硬件信息
    CSV文件自动化(自定义参数)
    服务器数据恢复案例分享-硬盘掉线恢复
    DELL EqualLogic PS6100存储硬盘坏道数据恢复
    成功恢复某服务器丢失数据过程
    分析Linux raid6同步成raid5导致数据丢失的情况
    服务器RAID硬盘离线和数据库损坏数据恢复方法
    chkdsk 后数据丢失的恢复方法
  • 原文地址:https://www.cnblogs.com/k5bg/p/11137906.html
Copyright © 2011-2022 走看看