第1章 移植架構 1
1.1 移植架構的設計 2
1.2 API模擬層的結構 3
1.3 API模擬層的實現(xiàn)方法 4
1.3.1 X窗口系統(tǒng) 4
1.3.2 Display和X的服務器/客戶機結構 5
1.3.3 窗口管理器 8
1.3.4 X事件 9
1.3.5 GDK和GTK 10
1.4 編譯器差異 11
1.5 示例程序介紹 15
1.6 小結 15
第2章 GDI子系統(tǒng) 17
2.1 Windows和Linux的圖形用戶界面輸出比較 18
2.1.1 Windows的圖形用戶界面輸出 18
2.1.2 Linux的圖形用戶界面輸出 19
2.2 GDI模擬架構 19
2.2.1 高級GDI函數 20
2.2.2 GDI對象 21
2.2.3 輸出設備 23
2.3 GDI對象詳述 26
2.3.1 概述 26
2.3.2 位圖對象(HBITMAP) 34
2.3.3 字體對象(HFONT) 38
2.3.4 裁剪區(qū)(HRGN) 38
2.3.5 筆和刷子(HPEN,HBRUSH) 40
2.4 屏幕輸出 41
2.4.1 當前對象和繪圖模式 41
2.4.2 屏幕設備和內存設備的差別 49
2.4.3 DCX_CLIPCHILDREN標志 53
2.4.4 私有設備上下文 54
2.4.5 圖像輸出 54
2.4.6 其他輸出函數 57
2.5 元文件(metafile) 60
2.5.1 Windows元文件概述 60
2.5.2 生成元文件 62
2.5.3 播放元文件 64
2.6 小結 65
第3章 文本輸出和字體管理 67
3.1 文本輸出 68
3.1.1 基本概念 68
3.1.2 格式化文本輸出 70
3.1.3 非格式化文本輸出 71
3.2 字體管理 76
3.2.1 字體管理的一般概念 76
3.2.2 Linux下的字體管理 78
3.2.3 GDI中的字體管理 79
3.2.4 幾個關鍵API的模擬實現(xiàn) 80
3.3 小結 86
第4章 窗口子系統(tǒng) 87
4.1 Windows和Linux的窗口系統(tǒng)比較 88
4.1.1 Windows的窗口系統(tǒng) 88
4.1.2 Linux的窗口系統(tǒng) 89
4.2 窗口類 90
4.2.1 窗口類數據結構 90
4.2.2 窗口類的注冊和撤銷 92
4.3 窗口和窗口句柄 93
4.3.1 窗口對象 93
4.3.2 窗口句柄 96
4.3.3 窗口的創(chuàng)建和銷毀 97
4.4 窗口過程 102
4.4.1 窗口過程的內部表示 103
4.4.2 CallWindowProc 104
4.4.3 DefWindowProc 106
4.5 窗口繪圖 108
4.5.1 窗口關聯(lián)的設備上下文 108
4.5.2 窗口更新區(qū)域和重繪 111
4.6 小結 114
第5章 消息子系統(tǒng) 115
5.1 Windows和Linux的消息系統(tǒng)比較 116
5.2 消息隊列 116
5.3 消息的投遞(Post) 118
5.4 消息的發(fā)送(Send) 118
5.5 消息的提取和分發(fā) 119
5.6 Windows消息鉤子(Hook) 121
5.7 小結 124
第6章 用戶輸入 125
6.1 Windows和Linux的用戶輸入系統(tǒng)比較 126
6.1.1 Windows的用戶輸入系統(tǒng) 126
6.1.2 Linux的用戶輸入系統(tǒng) 127
6.2 鍵盤輸入 128
6.2.1 將GDK鍵盤事件轉換為Windows鍵盤事件 128
6.2.2 從線程的用戶輸入隊列中提取鍵盤消息 130
6.3 鍵盤焦點 130
6.3.1 Windows的焦點模型 131
6.3.2 Linux的焦點模型 131
6.3.3 模擬層鍵盤焦點系統(tǒng)的設計和實現(xiàn) 133
6.4 字符消息 135
6.5 插入符 138
6.6 鼠標輸入 139
6.6.1 將GDK鼠標事件轉換為Windows鼠標事件 139
6.6.2 從線程的用戶輸入隊列中提取鼠標消息 141
6.6.3 鼠標光標 142
6.7 小結 143
第7章 剪貼板和拖放 145
7.1 Windows剪貼板和Linux剪貼板的比較 146
7.1.1 Windows剪貼板 146
7.1.2 Linux剪貼板 148
7.2 模擬層剪貼板的設計與實現(xiàn) 153
7.2.1 剪貼板的管理 153
7.2.2 格式的管理 154
7.2.3 數據的交換 155
7.3 模擬層中拖放的實現(xiàn) 158
7.4 小結 160
第8章 標準控件、菜單與對話框 161
8.1 概述 162
8.2 List Box 163
8.2.1 List Box控件的風格 163
8.2.2 List Box控件的設計與實現(xiàn) 166
8.3 Edit 168
8.3.1 Edit控件的風格 168
8.3.2 Edit控件的消息 169
8.3.3 Edit控件的設計與實現(xiàn) 171
8.4 ComboBox 176
8.4.1 ComboBox控件概述 177
8.4.2 ComboBox控件消息的處理 177
8.5 菜單 183
8.5.1 菜單消息 183
8.5.2 菜單模板資源 184
8.5.3 菜單的設計與實現(xiàn) 184
8.6 對話框 189
8.6.1 對話框模板結構 190
8.6.2 對話框的設計與實現(xiàn) 191
8.7 小結 193
第9章 打印 195
9.1 Windows和Linux的打印比較 196
9.1.1 Windows的打印系統(tǒng) 196
9.1.2 Linux的打印系統(tǒng) 196
9.2 模擬層打印模塊的設計 197
9.2.1 使用CUPS和打印機進行通信 197
9.2.2 使用PostScript完成打印內容模擬 197
9.3 模擬層打印模塊架構 199
9.4 獲取打印機信息 202
9.4.1 獲取打印機數量 202
9.4.2 獲取打印機名稱、打印機端口和打印機型號 203
9.4.3 把PostScript文件送往打印機 206
9.5 打印選項設置 206
9.5.1 創(chuàng)建打印作業(yè) 207
9.5.2 設置打印參數 208
9.5.3 釋放內存 208
9.6 打印色彩管理 209
9.6.1 Windows打印色彩管理 209
9.6.2 模擬層打印模塊中的色彩管理 209
9.7 打印坐標系管理 210
9.7.1 Windows邏輯坐標系和PostScript坐標系 211
9.7.2 坐標系轉化 211
9.8 Windows GDI邏輯畫筆在打印模塊中的實現(xiàn) 213
9.8.1 設置邏輯畫筆的顏色和寬度 213
9.8.2 設置邏輯畫筆樣式 214
9.8.3 實例分析 215
9.9 Windows GDI刷子在打印模塊中的實現(xiàn) 216
9.9.1 PostScript刷子圖案定義 216
9.9.2 PostScript刷子填充功能實現(xiàn) 216
9.10 Windows GDI位圖在打印模塊中的實現(xiàn) 219
9.10.1 PostScript位圖數據描述 219
9.10.2 PostScript位圖操作 221
9.11 打印裁剪方案 224
9.11.1 裁剪區(qū)域運算 224
9.11.2 設置裁剪區(qū)域 225
9.12 字體的打印 226
9.12.1 字體打印所需的PostScript命令 228
9.12.2 PostScript字體字典 229
9.12.3 字體字典的構造 230
9.12.4 Pango, PostScript和Freetype的數據單位關系 236
9.13 小結 237
第10章 Unicode與國際化 239
10.1 基本概念 240
10.1.1 本地化、國際化與全球化 240
10.1.2 Locale 241
10.1.3 字符集 244
10.1.4 Unicode字符集 245
10.2 Windows系統(tǒng)和Linux系統(tǒng)中的字符集差別 246
10.2.1 Windows上的字符集 246
10.2.2 Linux上的字符集 248
10.3 Windows系統(tǒng)和Linux系統(tǒng)中的Unicode實現(xiàn)差別 248
10.3.1 Windows上的Unicode 248
10.3.2 Linux上的Unicode 249
10.4 ANSI/Unicode與窗口子系統(tǒng) 249
10.4.1 ANSI代碼頁 249
10.4.2 GetACP的實現(xiàn)方案分析 250
10.4.3 GetACP的實現(xiàn) 251
10.4.4 A/W窗口 254
10.5 字符串處理中需要注意的問題 258
10.5.1 大小寫轉換 258
10.5.2 字符串長度 258
10.5.3 字符串比較 259
10.5.4 分割字符 259
10.6 BiDi支持 259
10.6.1 BiDi的處理 260
10.6.2 BiDi處理函數實現(xiàn) 261
10.7 小結 267
第11章 國際化輸入 269
11.1 概述 270
11.2 Windows中的國際化輸入 271
11.2.1 輸入上下文(Input Context) 271
11.2.2 輸入法管理(IMM) 272
11.2.3 IME消息及消息過程 273
11.3 Linux中的國際化輸入 274
11.3.1 Gtk輸入上下文(GtkIMContext) 275
11.3.2 GtkIMContext發(fā)送的信號 276
11.4 模擬層國際化輸入的架構 277
11.5 Input Context設計與實現(xiàn) 278
11.5.1 IMContext結構設計 278
11.5.2 ImmGetContext的實現(xiàn) 280
11.5.3 ImmAssociateContext的實現(xiàn) 283
11.6 IME組件的控制管理 284
11.7 與客戶窗口的協(xié)作 284
11.7.1 過濾鍵盤事件 284
11.7.2 監(jiān)聽焦點改變事件 285
11.7.3 銷毀輸入法窗口 285
11.7.4 GTK信號的處理 286
11.8 小結 287
第12章 資源的移植 289
12.1 資源概述 290
12.2 資源移植的過程 292
12.2.1 資源編譯工具的模擬 293
12.2.2 高級資源加載API 311
12.2.3 低級資源加載API 312
12.3 小結 314
附錄A Hello World Windows程序在Linux上的模擬 315
附錄B PostScript語言簡介 351
附錄C LCID與ANSI代碼頁對應表 359
參考文獻 364
索引 365