## 相關技術
### GDI (Graphics Device Interface)
GDI含義是圖形設備接口,主要任務是負責系統與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。GDI的出現使程序員無需要關心硬件設備及設備驅動,就可以將應用程序的輸出轉化為硬件設備上的輸出,實現了程序開發者與硬件設備的隔離,大大方便了開發工作。
GDI具有如下特點:
1. 不允許程序直接訪問物理顯示硬件,通過稱為“設備環境”的抽象接口間接訪問顯示硬件;
2. 程序需要與顯示硬件(顯示器、打印機等) 進行通訊時,必須首先獲得與特定窗口相關聯的設備環境;
3. 用戶無需關心具體的物理設備類型;
4. Windows參考設備環境的數據結構完成數據的輸出。
* * * * *
### GDI+ (Graphics Device Interface Plus)
GDI+是WindowsXP及以后版本中的一個子系統,它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。顧名思義,GDI+是以前版本GDI的繼承者,出于兼容性考慮,高版本的Windows仍然支持以前版本的GDI,但是在開發新應用程序的時候,開發人員為了滿足圖形輸出需要應該使用GDI+,因為GDI+對以前的Windows版本中GDI進行了優化,并添加了許多新的功能。
作為圖形設備接口的GDI+使得應用程序開發人員在輸出屏幕和打印機信息的時候無需考慮具體顯示設備的細節,他們只需調用GDI+庫輸出的類的一些方法即可完成圖形操作,真正的繪圖工作由這些方法交給特定的設備驅動程序來完成。GDI+使得圖形硬件和應用程序相互隔離,從而使開發人員編寫設備無關的應用程序變得非常容易。
#### 新增功能
* 漸變畫刷
GDI+允許用戶創建一個沿路徑或直線漸變的畫刷,來填充外形、路徑、區域,漸變畫刷同樣也可以畫直線、曲線、路徑,當你用一個線形畫刷填充一個外形時,顏色就能夠沿外形逐漸變化。
* 持久路徑對象
在GDI中,路徑屬于設備描述表(DC),畫完后路徑就會被破壞。在GDI+中,繪圖工作由Graphics對象來完成,你可以創建幾個與Graphics分開的路徑對象,繪圖操作時路徑對象不被破環,這樣你就可以多次使用同一個路徑對象畫路徑了。
* 變形矩陣對象
GDI+提供了矩陣對象,一個非常強大的工具,使得編寫圖形的旋轉、平移、縮放代碼變得非常容易。一個矩陣對象總是和一個圖形變換對象聯系起來。
* 可伸縮區域
GDI+ 在區域方面對GDI進行了改進,在GDI中,區域存儲在設備坐標中,對區域唯一可進行圖形變換的操作就是對區域進行平移。而GDI+用世界坐標存儲區域,允許對區域進行任何圖形變換。
* 混合
利用Alpha通道的混合技術,你可以指定填充顏色的透明度,透明顏色與背景色相互融合,填充色越透明,背景色顯示越清晰。
* 多種圖像格式
圖像在圖形界面程序中占有舉足輕重的地位,GDI+除了支持BMP等GDI支持的圖形格式外,還支持JPEG、GIF、PNG、TIFF等圖像格式,你可以直接在程序中使用這些圖片文件,而無需考慮它們所用壓縮算法。
* * * * *
### Direct2D
Direct2D 是一種硬件加速的即時模式二維圖形API,可為二維幾何對象、位圖和文本提供高性能、高質量的呈現。Direct2D API 可與使用GDI、GDI+或Direct3D的現有代碼進行交互。與使用GDI的應用程序相比,使用Direct2D處理圖形的應用程序可實現更高的視覺質量。Direct2D使用基元抗鋸齒功能,在呈現的內容中實現外觀更為平滑的曲線和直線。在呈現二維基元時,也完全支持透明度和 Alpha 混合。
在需要的情況下,開發人員可以指定矢量圖形的鋸齒呈現。這些情況包括需要與硬像素邊界(如指針或標尺等 UI 元素)對齊、必須匹配輸出的GDI樣式或者將在呈現過程的下游通過多重采樣抗鋸齒或其他一些機制執行抗鋸齒。
通過GDI與Direct3D的圖面級互操作性,開發人員可以更方便地集成基于 Direct2D 的呈現。主要通過 GDI、GDI+或Direct3D呈現內容的應用程序可以先使用Direct2D呈現其應用程序的特定區域,經過一段時間再改用這樣一種模型,即Direct2D主要用于執行呈現,GDI 主要用于插件或傳統可擴展性。
通過 Direct2D,還可以方便地使用DirectWrite這一新的文本 API 以及Microsoft Windows 圖像處理組件 (WIC)的高級圖像處理功能。
* * * * *
### MSDN (Microsoft Developer Network)
MSDN稱為微軟開發者網絡,是微軟一個期刊產品,專門介紹各種編程技巧。其中有大量關于Windows API 和以上三項技術的詳細開發文檔,本文檔中也引用了部分MSDN的相關知識。
- 序言
- 基礎
- 概念
- 術語
- 相關技術
- 入門
- 如何獲取
- 環境需求
- 使用條件
- 開發規范
- 文件結構
- 讓我們開始吧
- 全局命令
- 引擎命令
- Ex_Init
- Ex_UnInit
- Ex_XMLRegisterValueCallback
- Ex_XMLRegisterCallback
- Ex_GetLong
- 輔助命令
- Ex_SleepEx
- Ex_GetHash
- Ex_Atom
- 窗口命令
- 窗口相關
- Ex_WndRegisterClass
- Ex_WndCreate
- Ex_WndMsgLoop
- 皮膚相關
- Ex_DUIBindWindow
- Ex_DUICreateFromLayout
- Ex_DUILoadLayout
- Ex_DUIHandEvent
- Ex_DUIShowWindow
- Ex_DUIShowWindowEx
- Ex_DUIGetBkgColor
- Ex_DUISetBkgColor
- Ex_DUISetBkgImage
- Ex_DUIGetAlpha
- Ex_DUISetAlpha
- Ex_DUIGetSysCtl
- Ex_DUIGetObjFromID
- Ex_DUIGetClientRect
- Ex_DUIInvalidateRect
- Ex_DUIObjFromWindowPoint
- Ex_DUIObjFromScreenPoint
- Ex_DUIAddTrayIcon
- Ex_DUIPopupTrayIcon
- Ex_DUIPopupTipsEx
- Ex_DUIDeleteTrayIcon
- 關于布局文件
- 控件命令
- 控件基類
- 關于布局文件
- Ex_ObjCreate
- Ex_ObjCreateEx
- Ex_ObjDestroy
- Ex_ObjGetLong
- Ex_ObjSetLong
- Ex_ObjDispatchMessage
- Ex_ObjSendMessage
- Ex_ObjPostMessage
- Ex_ObjCallProc
- Ex_ObjDefProc
- Ex_ObjDispatchOwnerMessage
- Ex_ObjUpdate
- Ex_ObjInvalidateRect
- Ex_ObjBeginPaint
- Ex_ObjEndPaint
- Ex_ObjGethWnd
- Ex_ObjGethExDui
- Ex_ObjGethTheme
- Ex_ObjGetParent
- Ex_ObjSetParent
- Ex_ObjRegister
- Ex_ObjGetText
- Ex_ObjSetText
- Ex_ObjGetBkColor
- Ex_ObjSetBkColor
- Ex_ObjGetBkImageInfo
- Ex_ObjSetBkImageInfo
- Ex_ObjGetBkMode
- Ex_ObjSetBkMode
- Ex_ObjGetTextColor
- Ex_ObjSetTextColor
- Ex_ObjGetBorderColor
- Ex_ObjSetBorderColor
- Ex_ObjGetAlpha
- Ex_ObjSetAlpha
- Ex_ObjSetFont
- Ex_ObjSetRedraw
- Ex_ObjValidate
- Ex_ObjSetTimer
- Ex_ObjKillTimer
- Ex_ObjEnableScrollBar
- Ex_ObjGetScrollBar
- Ex_ObjGetScrollPos
- Ex_ObjSetScrollPos
- Ex_ObjGetScrollRange
- Ex_ObjSetScrollRange
- Ex_ObjGetTrackPos
- Ex_ObjGetScrollInfo
- Ex_ObjSetScrollInfo
- Ex_ObjGetClassNameA
- Ex_ObjGetClassNameW
- Ex_ObjGetRect
- Ex_ObjClientToWindow
- Ex_ObjMove
- Ex_ObjLockPos
- Ex_ObjIsVisible
- Ex_ObjShow
- Ex_ObjEnable
- Ex_ObjGetAnimationInfo
- Ex_ObjSetAnimationInfo
- Ex_ObjBeginAnimation
- Ex_ObjHandEvent
- Ex_ObjHandEventFromID
- 控件消息
- 介紹
- 屬性分發
- 設置提示文本
- 獲取提示文本
- 組件狀態被改變
- 計算尺寸
- 獲取Tab焦點區域矩形
- 繪制背景
- 繪制非客戶區
- 繪制主題數據
- 系統控件
- 標題欄
- 圖標控件
- 系統按鈕
- 菜單
- 基礎控件
- 標簽
- 按鈕
- 普通按鈕
- 圖形按鈕
- 組圖按鈕
- 下拉按鈕
- 圖片框
- 鏈接框
- 選擇框
- 三態選擇框
- 單選框
- 分組框
- 進度條
- 滾動條
- 編輯框
- 豐富文本框
- 高級控件
- 組合框
- 列表框
- 選擇夾
- 瀏覽框
- 擴展控件
- 繪圖命令
- 關于繪圖引擎
- 設備上下文
- 畫布
- _excanvas_getlasterror
- _excanvas_setlasterror
- _excanvas_getlong
- _canvas_create
- _canvas_destroy
- _canvas_validate
- _canvas_beginpaint
- _canvas_endpaint
- _canvas_clear
- _canvas_drawimage
- _canvas_drawimagerect
- _canvas_drawimagerectrect
- _canvas_drawline
- _canvas_drawlinefrompen
- _canvas_drawimagefromdrawdata
- _canvas_drawimagegird
- _canvas_drawrectangle
- _canvas_fillrectangle
- _canvas_fillrectanglefrombrush
- _canvas_getdc
- _canvas_width
- _canvas_height
- _canvas_setbkmode
- _canvas_getbkmode
- _canvas_bitblt
- _canvas_bitblt_dc
- _canvas_alphablt
- _canvas_alphablt_dc
- _canvas_cliprect
- _canvas_cliphrgn
- _canvas_resetclip
- _canvas_savetofile
- _canvas_resize
- _canvas_drawrectanglefrompen
- _canvas_setfont
- _canvas_getfont
- _canvas_getlogfont
- _canvas_getpixel
- _canvas_calctextsize
- _canvas_drawtext
- _canvas_savetomemory
- _canvas_blur
- 圖像
- _image_width
- _image_height
- _image_createfromfile
- _image_destory
- _image_createfromstream
- _image_selectactiveframe
- _image_getframecount
- _image_copy
- _image_copyrect
- _image_createfrommemory
- _image_savetofile
- _image_getframedelay
- _image_createfromhicon
- _image_create
- _image_savetomemory
- _image_lockbits
- _image_createfromhres
- 畫筆
- _pen_create
- _pen_destory
- _pen_create_frombrush
- 畫刷
- _brush_create
- _brush_destroy
- _brush_createfromimage
- _brush_create_lineargradientfrompoint
- 字體
- _font_createfromfamily
- _font_create
- _font_destroy
- _font_getlogfont
- _font_createfromlogfont
- 路徑
- 區域
- 文本格式
- 效果
- 布局文件
- 關于XML
- 文件結構
- 特殊語法
- 主題文件
- 關于EXT
- 文件結構
- 貼圖文件
- 描述文件
- 制作主題
- 相關命令
- Ex_ThemeLoad
- Ex_ThemeFree
- Ex_ThemepData
- Ex_ThemeGetData
- Ex_ThemeGetColor
- Ex_ThemeGetRect
- Ex_ThemeDraw
- Ex_ThemeDrawEx
- Ex_ThemeDispatchDrawEx
- 緩動特效
- 關于特效
- 緩動種類
- 相關命令
- 授權機制