設備上下文(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. */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章