zoukankan      html  css  js  c++  java
  • 关于设备描述表

    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

  • 相关阅读:
    Redis数据持久化机制AOF原理分析一---转
    Linux中常用头文件的作用--转
    Signal Handling--ref
    Linux 信号signal处理函数--转
    深入redis内部--初始化服务器
    haproxy 503 service unavailable no server is avaible to handle this request
    linux下logrotate配置和理解---转
    extjs_09_定义自己的页面组件
    BZOJ 3211 弗洛拉前往国家 树阵+并检查集合
    atitit.无损传输二进制数据串传输网络
  • 原文地址:https://www.cnblogs.com/a-ray-of-sunshine/p/3584221.html
Copyright © 2011-2022 走看看