设备上下文(About Device Contexts),译自MSDN,权当学习的过程

  1. /*
  2.     1:图形对象:
  3.     当画笔,画刷,位图,调色板,区域,路径与一个DC相关联的时候,我们就称之为
  4.     一个图形对象。下面列出了每种对象的关联属性:
  5.         
  6.         位图:
  7.             以字节为单位的大小
  8.             以像素为单位的尺寸
  9.             颜色格式
  10.             压缩算法等
  11.         画刷:
  12.             风格,颜色,图案,原点
  13.         调色板:
  14.             颜色和颜色数目
  15.         字体:
  16.             类型名称
  17.             宽度
  18.             高度
  19.             线条粗度
  20.             字符集等
  21.         路径:
  22.             形状
  23.         画笔:
  24.             风格,宽度和颜色
  25.         区域:
  26.             位置和尺寸
  27.     当应用程序创建了一个DC之后,系统会自动地在此DC中存储一些默认的图形对象。
  28.     (没有默认的位图对象,也没有默认的路径对象)。应用程序可以通过函数
  29.     GetCurrentObject和GetObject来检查默认对象的属性,如果想改变DC里的对象,
  30.     程序需要先创建一个想要的对象,然后通过函数SelectObject将其选入DC中。
  31.     应用程序可以通过函数SetDCBrushColor将指定的颜色设置为当前画刷的颜色。
  32.     同样想取得当前画刷的颜色时可以使用函数GetDCBrushColor。画笔同样也有这样
  33.     两个类似的函数:SetDCPenColor和GetDCPenColor。
  34.     2:图形模式:
  35.     Windows支持五种图形模式,这些模式允许应用程序去指定颜色如何被混合,输出
  36.     在哪儿显示,输出如何被度量等。这五种图形模式被存储在DC里,其描述如下:
  37.         Background:
  38.             在涉及到位图及文本的操作中,此模式定义了背景色如何与已存在的窗口
  39.             或屏幕的颜色进行混合。
  40.         Drawing:
  41.             在涉及到画笔,画刷,位图及文本的操作中,此模式定义了前景色如何
  42.             与已经存在的窗口或屏幕的颜色进行混合。
  43.         Mapping:
  44.             定义了图形输出如何从逻辑座标对应到屏幕,窗口或纸的物理座标。
  45.         Polygon-fill:
  46.             定义了画刷的图案如何被填充到复杂区域的内部。
  47.         Stretching:
  48.             定义了当位图被压缩的时候位图的颜色如何与已存在的窗口或屏幕的颜色
  49.             进行混合。
  50.     类似于图形对象,系统在初始化DC的时候也指定了默认的图形模式,以下为两组
  51.     函数,它们可以用于取得或设置图形模式:
  52.         Background:     GetBkMode,SetBkMode.
  53.         Drawing:        GetROP2,SetROP2.
  54.         Mapping:        GetMapMode,SetMapMode.
  55.         Polygon-fill:   GetPolyFillMode,SetPolyFillMode.
  56.         Streching:      GetStrechBltMode,SetStrechBltMode.
  57.     3:设备上下文类型
  58.     有四种类型的DC,Display,Printer,Memory(compatible),Information。每种
  59.     DC都有专门的作用,描述如下:
  60.     Display:
  61.         支持在视频显示器上的描绘操作
  62.     Printer:
  63.         支持在打印机上的描绘操作
  64.     Memory:
  65.         支持在位图上的描绘操作
  66.     Information:
  67.         支持设备数据的取得
  68.     4:设备上下文的操作.
  69.     应用程序可以对设备上下文执行以下操作:
  70.         列举已存在的图形对象
  71.         选择新的图形对象
  72.         删除已存在的图形对象
  73.         保存当前的图形对象,属性及图形模式
  74.         恢复已保存的图形对象,属性及图形模式
  75.     另外,应用程序还可以通过DC完成以下功能:
  76.         检查图形输出是如何被转换的。
  77.         取消大型的描绘操作(由多线程程序里的一个线程启动的操作)
  78.         将打印机重新设置到指定的状态
  79.     A:针对于图形对象的操作
  80.         应用程序创建了一个DC之后,就可以在其上进行描绘操作了,但在描绘开始
  81.         之前,如果有必要的话,我们需要使用新的图形对象替换默认的图形对象。
  82.         函数GetCurrentObject和GetObject可用于检查默认的图形对象的属性,前者
  83.         会返回标识当前对象的句柄,会者会初始化包含对象属性的结构体。
  84.         一些打印机提供了长期保存在其内的画笔,画刷,字体等等对象,使用它们
  85.         可以提高应用程序的描绘速度。函数EnumObject和EnumFontFamilities可用于
  86.         列举出这些常驻对象,前者用于列举常驻画笔和画刷,后者用于列举常驻字体
  87.         及GDI字体。
  88.         创建图形对象的函数列表如下:
  89.         位图:
  90.             CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, 
  91.             CreateDiscardableBitmap, CreateDIBitmap
  92.         画刷:
  93.             CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt,
  94.             CreateHatchBrush, CreatePatternBrush, CreateSolidBrush
  95.         调色板:
  96.             CreatePalette
  97.         字体:
  98.             CreateFont, CreateFontIndirect
  99.         画笔:
  100.             CreatePen, CreatePenIndirect, ExtCreatePen
  101.         区域:
  102.             CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn,
  103.             CreatePolyPolygonRgn, CreateRectRgn, CreateRectRgnIndirect,
  104.             CreateRoundRectRgn
  105.     
  106.         以上每一个函数都会返回新创建图形对象的句柄。当应用程序得到这个句柄
  107.         之后,必须要调用SelectObject将新创建的对象选入到DC中,这样就会替换
  108.         掉默认的对象,但此时需要做的是保存SelectObject返回的默认对象的句柄,
  109.         以便在描绘结束之后将默认的图形对象重新选入到DC中然后再通过函数
  110.         DeleteObject将自己创建的图形对象删除掉,如果删除失败的话会造成严重
  111.         问题。
  112.     B:描绘操作的取消
  113.         当复杂的绘图程序执行图形操作时,它会消耗系统资源。为了利用系统的
  114.         多任务特性,应用程序可以通过线程及函数CancelDC来管理这些操作。
  115.         比如:线程A执行的图形操作正在消耗B需要的资源,线程B就可以调用函数
  116.         CancelDC来停止A的操作。
  117.     C:获取设备上下文
  118.         程序可以通过函数获取使用了DC的设备的数据:
  119.         GetDeviceCaps:
  120.             此函数可以获得显示器,打印机及数据设备的常用数据,这些数据包括
  121.             设备支持的数据容量,设备的分辩率,颜色格式,图形对象的数目,曲线
  122.             描绘,直线描绘,多边形描绘,文本描绘等。获取数据的方法是应用程序
  123.             指定DC的句柄及想得获取的数据的类型。
  124.         DeviceCapabilities.
  125.     D:保存,恢复,重新设置DC
  126.         SaveDC:
  127.             此函数将当前DC的对象,属性及图形模式记录到特殊的GDI堆栈中。画图
  128.             程序可以在用户进行描绘之前调用此函数并将程序此时的状态保存下来。
  129.             想恢复到保存的状态可以调用RestoreDC。
  130.         ResetDC:
  131.             用于重新设置打印机DC的数据。
  132.     5:支持ICM(图像颜色管理)的DC函数
  133.         尽管各个设备在图像技术及颜色容量上有所差异,但ICM确保了设备上的一幅
  134.         图像,一个图形或者一行文本尽量被渲染地接近其原始的用意。
  135.         以下GDI函数支持ICM:
  136.         CreateCompatibleDC 
  137.         CreateDC 
  138.         GetDCBrushColor 
  139.         GetDCPenColor 
  140.         ResetDC 
  141.         SelectObject 
  142.         SetDCBrushColor 
  143.         SetDCPenColor 
  144. */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章