袁鋒 Windows圖形編程
本書詳細介紹Windows圖形系統,包括Win32 GDI和 DirectDraw API的技術細節:設備環境、坐標空間和變換、像素、填充區域、位圖、圖像處理、文字處理、元文件、打印處理等。本書內容翔實、例子豐富、分析透徹,是Windows編程人員的實用參考書。附帶光盤包含書中實例、實用程序、相關信息等。
譯者序
前言
第1章 基本技術和知識
第2章 Windows圖形系統體系結構
第3章 GDI/DirectDraw內部數據結構
第4章 Windows圖形系統窺視
第5章 圖形設備抽象
第6章 坐標空間和變換
第7章 像素
第8章 直線和曲線
第9章 區域
第10章 位圖基礎
第11章 高級位圖圖形學
第12章 用Windows位圖進行圖像處理
第13章 調色板
第14章 字體
第15章 文本
本書詳細介紹Windows圖形系統,包括Win32 GDI和 DirectDraw API的技術細節:設備環境、坐標空間和變換、像素、填充區域、位圖、圖像處理、文字處理、元文件、打印處理等。本書內容翔實、例子豐富、分析透徹,是Windows編程人員的實用參考書。附帶光盤包含書中實例、實用程序、相關信息等。
目錄
第1章 基本技術和知識
1. l 用 c/c++進行基本的 windows編程
1.1.1 hello world(版本 1):啟動測覽器
1. 1.2 hello world(版本 2):直接繪制到桌面
1. 1. 3 hello world(版本 3):創建一個全屏窗口
1. 1.4 hello world(版本4):用directdraw畫圖
1.2 匯編語言
l.3 程序開發環境
1.3.l 開發與測試系統
1. 3.2 編譯器
l.3.3 microsoft平臺軟件開發工具
1.3.4 microsoft驅動程序開發工具
l. 3. 5 microsoft開發網絡庫
1. 4 win32可執行文件格式
1. 4. 1 導入目錄
1.4.2 導出目錄
1.5 microsoft windows操作系統的體系結構
1.5.l 硬件抽象層
1.5.2 微內核
1.5.3 設備驅動程序
.1.5.4 窗口管理和圖形系統
l.5.5 執行體
1.5.6 系統服務:windows本身的api
1.5.7 系統進程
1.5.8 服務
1.5.9 環境子系統
l.6 小結
1.6.l 其他參考文獻
l.6.2 范例程序
第2章 windows圖形系統體系結構
2.1 windows圖形系統組件
2.1.1 多媒體
2.1.2 windows視頻系統
2.1.3 靜態圖像
2.1.4 opengl
2.1.5 windows媒體
2.1.6 os內核模式組件
2.1.7 內核模式驅動程序
2.2 gdi體系結構
2.2.l 從gdi32.dll導出的函數
2.2.2 gdi函數分類
2.2.3 gdi系統服務調用
2.2.4 從win32 gdi api到 gdi引擎系統服務調用
2.3 directx體系結構
2.3.1 directx組件
2.3.2 directdraw體系結構
2.4 打印體系結構
2.4.1 win32打印池客戶dll
2.4.2 打印池系統服務進程
2.4.3 打印池路由器
2.4.4 打印提供者
2.4.5 打印處理器
2.4.6 語言監視器和端口監視器
2.4.7 打印池過程一瞥
2.5 圖形引擎
2.5.l 圖形引擎系統服務
2.5.2 圖形繪制引擎
2.5.3 圖形引擎數據結構
2.5.4 圖元變換
2.5.5 字體驅動程序
2.6 顯示驅動程序
2.6.l 視頻端口驅動程序和視頻微端口驅動程序
2.6.2 顯示驅動程序函數區域
2.6.3 顯示驅動程序初始化
2.6.4 表面繪制調用、鉤子和輸出
2.6.5 其他驅動程序特性
2.6.6 對directdraw/direct3d顯示驅動程序的支持
2.7 打印機驅動程序
2.7.1 微軟打印機驅動程序框架結構
2.7.2 打印機驅動程序圖形dll
2.7.3 html打印機驅動程序
2.8 小結
2.8.l 范例程序
2.8.2 其他參考文獻
第3章 gdi/directdraw內部數據結構
3.i 句柄和面向對象的編程
3.1.l 類和對象
3.1.2 封裝和信息隱藏
3.1.3 指針與句柄
3.1.4 全等映射
3.1.5 基于表格的映射
3.1.6 只有句柄是不夠的
3.2 解碼gdi對象句柄
3.2.l 對象句柄堆是不變的
3.2.2 hgdiobj并不是指針
3.2.3 進程 gdi句柄限制約為 12 000個
3.2.4 系統 gdi句柄限制約為 16 384個
3.2.5 hgdiobj的部分內容為索引值
3.2.6 hgdiobj的部分內容是gdi對象類型
3.3 定位gdi對象句柄表
3.4 解碼 gdi對象句柄表
3.4.l pkernel指向頁面地
3.4.2 ncount是一個部分選擇計數器
3.4.3 nprocess使得gdi句柄綁定到進程
3.4.4 nupper:再次檢查句柄
3.4. 5 ntype:內部對象類型
3.4.6 puser指向用戶模式數據結構
3.5 gdi對象的用戶模式數據結構
3. 5.l 用戶模式畫刷數據:純色畫刷優化
3.5.2 用戶模式區域數據:正方形區域優化
3.5.3 用戶模式字體數據:寬度表
3.5.4 用戶模式設備上下文數據:存儲設置信息
3.6 存取內核模式地址空間
3.7 windbg和gdi調試器擴展
3. 8 gdi內核模式數據結構
3.8.1 gdi引擎中的gdi對象句柄表
3.8.2 gdi引擎中的gdi對象類型
3.8.3 gdi引擎中的設備上下文
3.8.4 gdi引擎 pdev結構
3.8.5 gdi引擎表面
3.8.6 gdi引擎中的設備相關位圖
3.8.7 gdi引擎中的dib部分
3.8.8 gdi引擎中的畫刷
3. 8. 9 gdi引擎中的畫筆
3.8.10 gdi引擎中的調色板
3. 8. 11 gdi引擎中的區域
3.8. 12 gdi引擎中的路徑
3.8. 13 gdi引擎中的字體
3.8.14 gdi引擎中的其他gdi對象
3. 9 directdraw數據結構
3.10 小結
3.10.l 其他參考文獻
3.10.2 范例程序
第4章 windows圖形系統窺視
4.1 win32 api調用窺視
4.1. 1 做一個窺視程序
4.l.2 嵌入窺視dll
4.1.3 鉤入api調用鏈
4.1.4 信息收集
4.1.5 數據轉儲
4、l、6 窺視控制程序
4.2 win32 gdi窺視
4.2.1 gdi api定義文件
4.2.2 gdi數據解碼器
4.2.3 完全 api窺視
4.3 directdraw com接口窺視
4.3.1 虛函數表
4.3. 2 directdraw api定義
4.3.3 虛函數表破解
4.4 gdi系統調用窺視
4. 5 ddi接口窺視
4.6 小結
4.6. 1 其他參考文獻
4.6. 2 范例程序
第5章 圖形設備抽象
5.1 現代視頻顯示卡
5.1.l 幀緩沖區
5. 1.2 像素格式
5. 1. 3 雙緩存、 z一緩存和紋理
5. 1.4 硬件加速
5.1. 5 顯示設備和設置枚舉
5. 2 設備上下文
5.2. 1 創建設備上下文
5.2.2 查詢設備性能
5.2.3 設備上下文的屬性
5.2.4 與窗口關聯的設備上下文
5.2.5 多窗口環境下的顯示
5. 2.6 獲取與窗口關聯的設備上下文
5.2.7 公用設備上下文
5.2.8 類設備上下文
5.2.9 專用設備上下文
5.2.10 父設備上下文
5. 2.11 其他設備上下文
5.2.12 信息上下文
5.2. 13 內存設備上下文
5. 2.14 元文件設備上下文
5.3 格式化設備上下文
5.4 樣例程序:通用框架窗口
5.4.1 工具欄類
5.4.2 狀態窗口類
5.4.3 畫布窗口類
5、4.4 框架窗回類
5. 4.5 測試程序
5. 5 范例程序:繪圖和設備上下文
5. 5.1 windows更新區域
5. 5.2 wm_paint消息
5. 5.3 可視化窗口繪圖消息
5.6 小結
5.6.l 其他參考文獻
5.6.2 范例程序
第6章 坐標空間和變換
6.l 物理設備坐標空間
6.2 設備坐標空間
6.3 頁面坐標空間和映射模式
6. 3.1 mm_text映射模式
6.3.2 mm_ loengllsh、mm_hienglish映射模式
6.3.3 mm_lometric和 mm_himetric映射模式
6. 3. 4 mm_twips映射模式
6.3.5 mm_isotropic映射模式
6. 3.6 mm_anisotropic映射模式
6.3.7 窗口和視口原點
6.3.8 其他窗口和視口函數
6.4 世界坐標空間
6.4.l affine變換
6.4.2 用于世界坐標變換的 win32 api
6.4.3 使用世界坐標變換
6.5 使用坐標空間
6.6 程序舉例:滾屏和縮放
6.7 小結
6.7. 1 其他參考文獻
6.7.2 范例程序
第7章 像素
7. 1 gdi對象、句柄和句柄表
7. 1.1 gdi對象存儲
7.1.2 gdi對象表
7. 1.3 gdi對象句柄
7.1.4 gdi對象 api
7.1.5 gdi對象泄漏檢測
7. 2 裁剪
7. 2.1 裁剪流水線
7.2.2 簡單區域
7. 2.3 區域裁剪
7.2.4 元區域
7.2.5 設備上下文中的5個區域
7.2.6 可視化設備上下文區域
7.3 顏色
7.3.1 rgb顏色空間
7.3.2 hls顏色空間
7.3.3 索引顏色和凋色板
7.3.4 高級知識
7. 4 繪制像素
7.5 程序舉例:mandelbrot集
7.6 小結
7.6.l 其他參考文獻
7.6.2 范例程序
第8章 直線和曲線
8. 1 元光柵操作
8.2 背景模式與背景顏色
8.3 畫筆
8.3. 1 邏輯畫筆對象
8.3.2 庫存畫筆
8.3.3 簡單畫筆
8.3.4 擴展畫筆
8.3.5 查詢邏輯畫筆
8. 3. 6 gdi畫筆對象的封裝類
8.4 直線
8.5 bezier曲線
8.5.1 polydraw函數
8.5.2 其他bezier曲線的定義:通過所有的控制點
8.6 弧線
8.6.l 用角度來指定弧線:anglearc
8.6. 2 使用內框架畫筆來畫弧線
8.6.3 把弧線轉換成bezier曲線
8.7 路徑
8. 7.1 構造路徑
8.7.2 查詢路徑數據
8.7.3 路徑對象變換
8.7.4 使用路徑畫圖
8.7. 5 把路徑轉換成區域
8.8 例子:用自己定義風格的線做圖
8.9 小結
8.9.l 其他參考文獻
8.9.2 范例程序
第9章 區域
9.l 畫刷
9. 1.l 邏輯畫刷對象
9.1.2 庫存畫刷
9.1.3 自定義畫刷
9.1.4 系統顏色畫刷
9.1.5 logbrush結構
9.2 矩形
9.2.l 作為數據結構的矩形
9.2.2 繪制矩形
9.2. 3 邊界線和控制點的繪制
9.3 橢圓、弦、餅狀圖以及圓角矩形
9.4 多邊形
9.5 閉合路徑
9. 6 區域
9.6.l 創建區域對象
9.6.2 區域對象上的操作
9.6.3 使用區域繪圖
9.7 漸變填充
9.7.l 矩形的漸變填充
9.7.2 用漸變填充創建3d按鈕
9.8 實際中的區域填充
9.8.1 半透明填充
9.8.2 hls顏色空間的可移植漸變填充
9.8.3 徑向漸變填充
9.8.4 紋理和位圖填充
9.8.5 圖案填充
9.9 小結
9.9.l 其他參考文獻
9.9.2 范例程序
第10章 位圖基礎
10.l 設備無關的位圖格式
10.1.1 bmp文件格式
10.1.2 壓縮設備無關位圖
10.1.3 分散的設備無關位圖
10.2 dib類
10.3 顯示dib
10.3.1 stretchdibits
10.3.2 源矩形
10.3.3 目標矩形和拉伸模式
10.3.4 顏色格式轉換
10.3.5 光柵操作
10.3.6 stretchdibits函數的例子
10.3.7 setdibitstodevice
10. 4 內存設備上下文
10. 5 設備相關位圖
10.5.1 createbitmap
10.5.2 createbitmapindirect
10.5. 3 ddb的 getobject調用
10. 5.4 creat compatible bitmap和create discardable bitmap
10.5.5 createdibitmap
10.5. 6 loadbitmap
10.5.7 在dib和ddb間拷貝位圖
10. 5.8 存取原始的ddb像素陣列
10.6 使用 ddb
10. 6.l 顯示ddb
10.6.2 在菜單中使用位圖
10.6.3 用位圖作為窗口背景
10.7 dib段
10. 7.1 createdibsection
10.7.2 dib段類
10.7.3 對 dib段調用 getobjecttype/getobject
10.7.4 getdibcolortable/setdibcolortable
10. 7.5 使用dib段:設備無關的繪制
10.7.6 使用dib段:高分辨率繪制
10.8 小結
10. 8.l 其他參考文獻
10.8.2 范例程序
第11章 高級位圖圖形學
11.l 三元光柵操作
11.1.1 光柵操作的編碼
11.1. 2 三元光柵操作圖表
11.1.3 常用的光柵操作
11.2 透明位圖
11. 2. 1 平行四邊形位塊傳送: plgblt
11.2.2 四元光柵操作: maskblt
11.2.3 顏色鍵控法: transparentblt
11.3 不用屏蔽位圖實現透明度
11.3.l 用幾何圖形作為屏蔽
11.3.2 用裁剪作為屏蔽
11. 3.3 預先生成圖像
11.4 alpha混合
11.4.l 簡單常量 alpha混合
11.4.2 位圖的淡入談出
11.4.3 層疊窗口
11.4.4 alpha通道: airbrush
11. 4.5 模擬alpha混合
11.5 小結
11.5.l 其他參考文獻
11.5.2 范例程序
第12章 用windows位圖進行圖像處理
12.l 通用像素存取
12.2 位圖affine變換
12.3 快速專用位圖變換
12.4 位圖顏色變換
12.4.l 將位圖轉換為灰度位圖
12.4.2 gamma校正
12.5 位圖像素變換
12. 5.l 通用像素變換類
12.5.2 通用通道分離類
12. 5.3 通道分高舉例
12.5.4 直方圖
12.6 位圖空間過濾器
12.6.l 平滑過濾器和銳化過濾器
12.6.2 邊緣檢測和浮雕過濾器
12.6.3 變形過濾器
12.7 小結
12.7.l 其他參考文獻
12.7.2 范例程序
第13章 調色板
13.l 系統調色板
13.1.l 顯示設置
13.1.2 查詢系統調色板
13.1.3 靜態顏色
13.2 邏輯調色板
13.2.l 缺省調色板
13.2.2 半色調調色板
13.2.3 創建自定義調色板
13.3 調色板消息
13.3.1 wm_querynewpalette消息
13.3.2 wm_paletteischanging消息
13. 3.3 wm_palettechanged消息
13. 3.4 測試程序
13.4 凋色板和位圖
13.4.l 設備相關位圖和調色板
13.4.2 設備無關的位圖和調色板
13. 4. 3 dib顏色表中的調色板索引
13.4.4 dib段和調色板
13.5 顏色的量化
13.6 減少位圖顏色深度
13. 7 小結
13. 7.l 其他參考文獻
13.7. 2 范例程序
第14章 字體
14. 1 什么是字體
14.1.l 字符集和代碼頁
14.1. 2 圖元
14. 1.3 字體
14.1.4 字體風格和字體族
14.2 位圖字體
14.3 向量字體
14. 4 truetype字體
14. 4.1 truetype字體文件格式
14. 4.2 字體頭
14.4. 3 最大需求表
14.4.4 字符到圖元索引的映射
14.4.5 位置索引
14.4.6 圖元數據
14.4.7 圖元指令
14.4.8 水平規格(hhea和htmx表)
14.4.9 字距調整
14.4. 10 os/2和 windows規格
14.4.11 其他表
14. 4. 12 truetype字體集
14.5 字體的安裝和內嵌
14.5.l 字體資源文件
14.5.2 安裝公用字體
14.5.3 安裝專用字體和 multiple masteropentype字體
14.5.4 從內存映像中安裝字體
14.5.5 字體的內嵌
14.5.6 系統字體列表
14.6 小結
14. 6.l 其他參考文獻
14.6.2 范例程序
第15章 文本
15.l 邏輯字體
15.1.1 微軟印刷學術語
15.l.2 庫存字體
15.1.3 創建邏輯字體
15.1.4 邏輯字體到物理字體映射
15.1.5 panose字面匹配
15.2 查詢邏輯字體
15.2.l 位圖字體和矢量字體的度量
15.2.2 true/opentype字體度量
15.2. 3 瀏覽logfdnt和字體度量
15.2.4 字體度量的準確度
15.3 簡單文本繪制
15.3.l 對齊文本
15. 3.2 從右到左的布局與閱讀方式
15.3.3 字符附加量和分割符附加量
15.3.4 字符寬度
15.4 高級文本繪制
15.4.l 字符到圖元的映射
15. 4.2 字距調整
15.4.3 布置字符
15.4.4 擴展的文本繪制
15.4.5 uniscribe
15.4.6 圖元存取
15.5 格式化文本
15.5.l 帶制表符的文本繪制
15.5.2 簡單段落格式化
15.5. 3 設備無關的文本格式化
15.6 文本特效
15.6.l 文本著色
15.6.2 文本風格
5.6. 3 文本幾何特性
15.6.4 文本做位圖
15. 6. 5 文本做曲線
15.6. 6 文本做區域
15. 7 小結
15.7. 1 其他參考文獻
15. 7. 2 范例程序
第16章 元文件
16.l 元文件基礎
16. 1.l 創建增強元文件
16.1.2 播放增強元文件
16.1.3 查詢增強元文件
16. 1.4 增強元文件變換
16. 2 增強元文件內部結構
16. 2. 1 emf記錄
16. 2.2 emf記錄類型分類
16. 2.3 解碼emf記錄
16.2.4 emf中的簡單gdi對象
16.2.5 emf中的位圖
16.2.6 emf中的區域
16.2.7 emf中的路徑
16.2. 8 emf中的調色板
16. 2.9 emf中的坐標空間
16. 2. 10 emf中的繪制命令
16. 2.11 emf設備無關性
16.3 枚舉 emf
16.3.l 用于emf枚舉的c++類
16. 3.2 emf回放中的慢動作
16.3.3 跟蹤emf回放過程
16.3. 4 動態改變emf
16.3.5 從emf中派生emf
16.4 emf做編程工具
16.4. 1 emf反編譯器
16. 4.2 捕獲emf打印池文件
16.5 小結
16.5.l 其他參考文獻
16. 5. 2 范例程序
第17章 打印
17.l 理解打印池程序
17.1. 1 打印進程
17. 1.2 打印機控制語言
17.1.3 直接打印到端口
17.1.4 通過打印池打印
17.1.5 emf打印處理器
17.1.6 枚舉打印機
17. 1.7 查詢打印機
17.1.8 設置打印機驅動程序
17.2 用gdi實現基本打印功能
17.2.l 打印通用對話框
17.2.2 創建打印機設備上下文
17.2.3 查詢打印機設備上下文
17.2.4 打印任務的輪廓
17.3 打印設計
17.3.1 統一邏輯坐標空間
17.3.2 紙張模擬
17.3.3 多頁、多列顯示
17.3.4 多頁打印
17. 3.5 通用打印類
17.4 在打印機設備上下文中繪制
17.4.l 坐標空間單位
17.4.2 文本
17.4.3 位圖
17.4.4 jpeg圖像打印
17.5 小結
17.5.l 其他參考文獻
17.5.2 范例程序
第 18章 directdraw和 direct3d立即模式
18.l 組件對象模型
18.1.1 com接口
18.1.2 com類
18.1.3 創建 com對象
18. 1.4 hresult
18.1.5 directx和 com
18. 2 directdraw基礎
18.2.l idirectdraw7接口
18.2.2 idirectdrawsurface7接口
18.2.3 在directdraw表面上繪制圖形
18.2.4 顏色匹配
18.2.5 idirectdrawclipper接口
18.2.6 簡單 directdraw窗口
18.3 建立direct圖形庫
18.3.l 像素繪制
18. 3.2 直線繪制
18. 3.3 區域填充
18.3.4 裁剪
18.3.5 后臺表面
18.3.6 用彩色鍵控實現透明
18. 3.7 字體與文本
18.3.8 這并不只是一個游戲
18.4 direct3d立即模式
18.4.l 創建direct3d立即模式環境
18.4.2 處理窗口大小變化
18.4.3 兩步繪制
18.4.4 將direct3d放在窗口中
18.4.5 紋理表面
18.4.6 direct3d立即模式舉例
18.5 小結
18.5.l 其他參考文獻
18.5.2 范例程序
譯者序
當我第一次接過這本書的英文版樣書時,我就驚詫于這本書是一個中國人寫的。
本書作者 Feng Yuan是一位留美學者,軟件工程學博士,畢業于南京大學。在過去的四年中,他在HP溫哥華研究與開發實驗室從事DeskJet打印機驅動程序的開發。本書正是在此基礎上寫作的,它凝結了作者多年實際開發的汗水。
本書的內容覆蓋了Windows的圖形系統,從Win32API的表層到最底層的顯示和打印機的驅動程序,特別集中在 Win32 GDI和 DirectX的 DirectDraw部分。它主要集中討論了Windows NT4和Window 2000平臺,還覆蓋了如下一些內容:Windows圖形系統的體系結構、GDI和Direct-Draw的數據結構、繪圖設備、GDI對象、像素、直線和曲線、填充區域和位圖、邏輯字體和文本格式化、元文件、打印和打印池、DirectDraw接口、GDI調試工具、EMF反編譯器、圖像繪制和3D效果。
本書的最大特點是其實用性。它不僅講述了這些內容,重要的是,它還給出了實際編程中用到的分析問題和解決問題的方法。本書是從實際工作中收集而來的,而不是利用其他參考文獻中編輯而成的,并且它提供了許多可以直接重用的函數、C++類、示例程序源代碼,這對于從事Windows圖形編程工作的人員來說,如圖形軟件工程師,排版系統、中文辦公軟件的工程師,以及對Windows內幕感興趣的程序員,大多數是可以直接使用的。本書是一本名副其實的Windows圖形編程寶典。
本書由英宇工作室的鄧浩組織翻譯,參加翻譯的人員還有裘強、薛賽男、林碧森、歐陽宇、易重英、陸紹飛、牛韜、王安鵬、祁力、徐繼偉、謝君英、劉舫、李超、陽愛軍、朱翠蓮。郭增元、楊青青、李娜。還有部分人員參與了錄人和排版工作,他們是溫春美,李明生。林江勇、武堂、王明舉、郭茜茜。
我們一直在盡力將本書翻譯好,但由于時間倉促,加之譯者水平有限,書中肯定會有不少疏漏,懇請讀者指正。我們接收廣大讀者意見的郵箱為: yingu@263.net。
2001年12月
前言
一本關于Windows編程的新書,要想真正有價值,它應該是深人的、完整的、最新的、正確的、基于實踐的和對讀者有幫助的。
一本深人的書應該從API的底層談起,一直講到API的設計原理、內部數據結構以及實現方法。它應該為你提供檢查和探測工具。
一本完整、最新的書,應該把注意力集中在迄今為止對Win32 API的最好實現--Windows 2000上(它將是微軟將來的操作系統的基礎),并覆蓋它的所有新特性。
一本正確的書,應該是對Win32 API功能進行實際探索,并驗證所有細節后書寫的。只閱讀微軟的開發文檔顯然是不夠的,因為這些文檔只是MAP的概要,并且有些不完全的。過時的甚至是模棱兩可的信息。
一本實用的、有用的書,對于程序員和軟件工程師來說,不應該只描述API和提供一些簡單例子,而應該解決現實世界的問題,提供可重用的生成模塊,提供有用的工具,并鼓勵讀者寫出很專業的程序。
特別是,這種書一般都需要闡述Win32 GDI,或者Windows圖形編程,它是所有Windows編程的基礎生成部分。到目前為止,講解最深的可能是 Matt Pietrek的書,它討論了 Windows3.1GDI的內部工作原理。關于GDI最完整和最新的描述由微軟的 MSDN庫提供。 CharlesPetzold最有名的一本書《Programming Windows》,第五版,其中有一半的篇幅講解 Windows 98GDI編程。
但是因為所有的Windows編程中經常需要處理Windows GDI,所以,需要一本更深入、更完整、更新、更正確和更有用的書來講解Windows GDI。這就是本書的寫作目標。
本書內容
本書講解如何用 Win32 GDI API進行圖形編程,同時介紹了 DirectDraw和 Direct3D立即模式。它覆蓋了在所有Win32平臺上實現的共同特性,僅在Windows NT/2000下實現的純32位特性,及在 Windows 2000和 Windows 98中增加的最新特性。例如,對 alpha混合、透明位傳輸、漸變填充。從右到左的閱讀順序、分層窗口、向打印機發送JPEG/PNG圖像等都進行了詳細講解。
本書是關于Windows編程的,并更深一步介紹這些東西是如何實現的,因此,使讀者可以更高效、自信地使用 Win32 API。
本書教你全面地、分析地閱讀Win32文檔,盡力理解 Win32 API設計和實現者的思路,并用邏輯推理和實驗來完整理解Win32 API,甚至找出文檔中遺漏的信息或錯誤的信息。
本書教你如何使用編程工具來理解Win32API。更重要的是,本書示范了如何建立你自己的工具,經常使用核心硬件級的系統編程技術,并設計一些有趣的實驗對Win32 API的沒有文檔記載的世界進行探索。開始的幾章可以作為系統級Windows編程書,也可用于Windows編程的其他領域。
本書教你創建可重用的生成塊以方便實際使用。除了一些簡單的測試和示例程序外,本書包含了大量的可重用函數、C++類、驅動程序、工具和重要程序,可用于產品級的 Windows程序。它開發了一個面向對象的 Windows編程C++類庫,支持簡單的窗口、SDI窗口、MDI窗口、對話框、工具欄、狀態窗口、屬性表、子類、通用對話柜等等。它提供一些類,處理DIB/DDB/DIB段、EMF繪制、圖像處理、顏色量化、錯誤擴散半色調,JPEG圖像解碼/編碼、字體文件解碼、字體嵌人、PANOSE字體匹配、圖元繪制、3D文本、設備無關的多重頁面布局、DirectDraw封裝、 Direct3D IM封裝等。
本書的代碼不依賴于 Microsoft FoundationClass,或者任何的第三方類庫,可用于任何C++程序。所有這些類命名為以K打頭,因此你可以很容易地將他們與MFC、ATL、OWL或者你自己的類庫混合使用。
本書組織結構
本書覆蓋了Windows圖形編程的三個層次:實現層、API層和應用層。
實現層覆蓋了 Win32 GDI API和 DirectX COM接口背后的內容,它是 Window圖形引擎和Win32子系統客戶DLL沒有文檔記載的領域。第2、3、4章覆蓋了實現層的所有內容,為理解API層建立一個堅固的基礎。
API層提供了 Win32 GDI API、 DirectDraw以及一些 Direct3D IM的精辟的、準確的、一步一步的描述。應用層建立在 API層之上,用于解決現實領域的問題、實現可重用函數、C++類和重要程序。API層和應用層根據一些主題一起討論。一般說來,一章的開始部分覆蓋API層,接著轉移至與現實應用相關的程序。對于講述更復雜的主題(如位圖),用一章覆蓋基本的主題,兩章覆蓋更高級的應用。
第1章"基本技術和知識",回顧了基本的Windows編程技術,這些在本書的后面將是有用的。它包括基本的Windows編程、Intel匯編語言、程序開發環境、Win32可執行文件格式以及Windows操作系統的體系結構。我最喜歡的部分是API"鉤子",它通過重寫Win32模塊的導入/導出目錄來實現。
第2章"Window圖形系統體系結構"從整體上瀏覽了Windows圖形系統,從Win32子系統DLL一直到圖形設備驅動程序。它講述了Windows圖形系統組件、GDI體系結構、DirectX體系結構、打印子系統體系結構、圖形引擎、顯示驅動程序和打印機驅動程序。我最喜歡的部分是對系統服務調用的描述,它在用戶模式GDI實現代碼和核心模式圖形引擎之間架起了一座橋梁,列出沒有文檔記載的系統服務調用(從GDI32.DLL、USER32.DLL、NTDLL.DLL和WIN32K.SYS)的工具和一個簡單的打印機驅動程序,它能生成帶嵌入位圖的HTML頁面。
網載 2013-07-04 14:50:14
|
相關閱讀 |
|
推薦文章 |
暫無評論。
稱謂:
内容:
驗證:
返回列表