• 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()移动视口的原点

  • 相关阅读:
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    ASP.Net请求处理机制初步探索之旅
    NET平台处理HTTP请求
    HTTP.SYS
    ASP.NET页面与IIS底层交互和工作原理
    MUI的一些笔记
    SpringMCV跨域
    servlet跨域
    Git
  • 原文地址:https://www.cnblogs.com/k5bg/p/11137906.html
Copyright © 2020-2023  润新知