• 关于设备描述表


    1. what is DC?

    Windows中的设备描述表,实际上就是对显示设备的一种抽象,而显示设备其实就是将内中的像素颜色数据渲染出来,所以设备描述表本质上就是一块内存,我们可以使用GDI函数来在该内存区域内进行绘制,所谓的绘制实际就是在该内存区域中添加像素的颜色信息,同时,Windows提供的GDI函数中,使用Pen来绘制线段,使用Brush来填充该DC,使用Font来写文字,所以如果我们要使用GDI函数在DC中,就必须首先设置这些参数,这些参数被称为DC的属性,显然如果这样使用GDI函数来进行绘图将非常繁琐,所以Windows将这些DC属性也抽象到设备描述表(DC)这个概念中,所以我们可知所谓设备描述表就是一块内存区域和Pen,Brush,ClipRegion,MapMode等等DC属性的一个实例。所以不同的设备描述表就是DC的这些个属性不同。

    2. DC的属性

    3. 获得DC的函数

    3.1 BeginPaint

      使用BeginPaint函数获得的DC是窗口的客户区的DC,所以GDI系统会帮我们设置好那些默认的参数,例如窗口的裁剪区域,使用的字体等等,我们就可以直接使用GDI绘图函数在该DC中进行绘制。

    3.2 CreateDC

    CreateDC函数通过指定设备名称,来创建一个与该设备相关的DC,通过该函数创建的DC必然与一个设备相关,例如打印机,显示器等,所以我们使用CreateDC函数来获得DC在其上的任何GDI操作都将反馈到与该DC相关的设备中,也就是GDI的绘制结果就会被显示出来。所以,如果我们要想获得类似于打印机,绘图仪这样的显示设备的DC,我们就必须使用该函数。

    3.3 CreateCompatibleDC

    CreateCompatibleDC函数的原型如下:

    该函数的作用是创建一个和参数hdc,兼容的DC,前面我们说过,所谓DC就是一块内存区域和那些DC属性的集合,所以这里的创建的兼容DC就是创建一个和 hdc 标示的DC属性完全相同的DC,但是其所指向的内存,却没有和任何实际的显示设备相关联,所以这个函数所创建的DC,就是指向一块普通的内存区域,而不是像BeginPaint函数获得的DC指向显卡的内存。所以由这个函数创建的DC,我们称为内存DC。由于在和设备兼容的内存DC中进行绘制,只是访问内存,而不会有大量的实际设备的调用,所以这可以减少,对设备驱动的调用。所以如果,我们要在某一个设备上进行复杂的图像绘制,最好首先创建一个和该设备兼容的DC,在该兼容DC(也即内存DC)中绘制,绘制完毕之后,再使用函数BitBlt(copy)将该兼容DC中的内容直接一次性拷贝到实际的DC中,这样将大大提高,图像的绘制效率。

    3.4 GetDC / GetDCEx

    这两个函数提供一种直接获取窗口DC的方式,同时提供了一些更加精细的控制。

    4 参考文章

    下面的文章,提供了窗口绘制,DC的一些信息。

    http://www.codeproject.com/Articles/89996/Drawing-in-Windows-101

  • 相关阅读:
    大数据学习路线图 让你精准掌握大数据技术学习
    在AI人工智能中如何巧妙学习大数据编程,成为五十万年薪的佼佼者
    大数据学习之Hadoop快速入门
    大数据学习|小白学习大数据需要满足这六个条件你就能学好大数据
    大数据学习路线(自己制定,从零开始)
    大数据学习之路(跟着大神学习一波)
    为什么这么多人学习大数据?新手该如何上手大数据?
    大数据学习路线图 让你精准掌握大数据技术学习?
    [监督学习]GDA 高斯判别分析
    The Josephus problem
  • 原文地址:https://www.cnblogs.com/a-ray-of-sunshine/p/3584221.html
Copyright © 2020-2023  润新知