出版社:电子工业出版社
年代:2007
定价:38.0
本书介绍一种把Windows GUI应用程序移植到Linux的方法——API模拟方法。书中介绍了这种方法的设计思想,以及具体的实现过程。同时,充分探讨了GUI应用程序移植所必然面对的基于不同操作系统的编程模型的差异,揭示了两个系统有关用户界面交互和图形输出基本逻辑结构的一些鲜为人知的特性。全书共分为10章,包括:移植架构,GDI子系统,窗口子系统,消息子系统,用户输入,打印,剪贴板和拖放,标准控件、菜单与对话框,Unicode与国际化,资源的移植。
第1章移植架构1
1.1移植架构的设计2
1.2API模拟层的结构3
1.3API模拟层的实现方法4
1.3.1X窗口系统4
1.3.2Display和X的服务器/客户机结构5
1.3.3窗口管理器8
1.3.4X事件9
1.3.5GDK和GTK10
1.4编译器差异11
1.5示例程序介绍15
1.6小结15
第2章GDI子系统17
2.1Windows和Linux的图形用户界面输出比较18
2.1.1Windows的图形用户界面输出18
2.1.2Linux的图形用户界面输出19
2.2GDI模拟架构19
2.2.1高级GDI函数20
2.2.2GDI对象21
2.2.3输出设备23
2.3GDI对象详述26
2.3.1概述26
2.3.2位图对象(HBITMAP)34
2.3.3字体对象(HFONT)38
2.3.4裁剪区(HRGN)38
2.3.5笔和刷子(HPEN,HBRUSH)40
2.4屏幕输出41
2.4.1当前对象和绘图模式41
2.4.2屏幕设备和内存设备的差别49
2.4.3DCX_CLIPCHILDREN标志53
2.4.4私有设备上下文54
2.4.5图像输出54
2.4.6其他输出函数57
2.5元文件(metafile)60
2.5.1Windows元文件概述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.2Linux下的字体管理78
3.2.3GDI中的字体管理79
3.2.4几个关键API的模拟实现80
3.3小结86
第4章窗口子系统87
4.1Windows和Linux的窗口系统比较88
4.1.1Windows的窗口系统88
4.1.2Linux的窗口系统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窗口的创建和销毁97
4.4窗口过程102
4.4.1窗口过程的内部表示103
4.4.2CallWindowProc104
4.4.3DefWindowProc106
4.5窗口绘图108
4.5.1窗口关联的设备上下文108
4.5.2窗口更新区域和重绘111
4.6小结114
第5章消息子系统115
5.1Windows和Linux的消息系统比较116
5.2消息队列116
5.3消息的投递(Post)118
5.4消息的发送(Send)118
5.5消息的提取和分发119
5.6Windows消息钩子(Hook)121
5.7小结124
第6章用户输入125
6.1Windows和Linux的用户输入系统比较126
6.1.1Windows的用户输入系统126
6.1.2Linux的用户输入系统127
6.2键盘输入128
6.2.1将GDK键盘事件转换为Windows键盘事件128
6.2.2从线程的用户输入队列中提取键盘消息130
6.3键盘焦点130
6.3.1Windows的焦点模型131
6.3.2Linux的焦点模型131
6.3.3模拟层键盘焦点系统的设计和实现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.1Windows剪贴板和Linux剪贴板的比较146
7.1.1Windows剪贴板146
7.1.2Linux剪贴板148
7.2模拟层剪贴板的设计与实现153
7.2.1剪贴板的管理153
7.2.2格式的管理154
7.2.3数据的交换155
7.3模拟层中拖放的实现158
7.4小结160
第8章标准控件、菜单与对话框161
8.1概述162
8.2ListBox163
8.2.1ListBox控件的风格163
8.2.2ListBox控件的设计与实现166
8.3Edit168
8.3.1Edit控件的风格168
8.3.2Edit控件的消息169
8.3.3Edit控件的设计与实现171
8.4ComboBox176
8.4.1ComboBox控件概述177
8.4.2ComboBox控件消息的处理177
8.5菜单183
8.5.1菜单消息183
8.5.2菜单模板资源184
8.5.3菜单的设计与实现184
8.6对话框189
8.6.1对话框模板结构190
8.6.2对话框的设计与实现191
8.7小结193
第9章打印195
9.1Windows和Linux的打印比较196
9.1.1Windows的打印系统196
9.1.2Linux的打印系统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创建打印作业207
9.5.2设置打印参数208
9.5.3释放内存208
9.6打印色彩管理209
9.6.1Windows打印色彩管理209
9.6.2模拟层打印模块中的色彩管理209
9.7打印坐标系管理210
9.7.1Windows逻辑坐标系和PostScript坐标系211
9.7.2坐标系转化211
9.8WindowsGDI逻辑画笔在打印模块中的实现213
9.8.1设置逻辑画笔的颜色和宽度213
9.8.2设置逻辑画笔样式214
9.8.3实例分析215
9.9WindowsGDI刷子在打印模块中的实现216
9.9.1PostScript刷子图案定义216
9.9.2PostScript刷子填充功能实现216
9.10WindowsGDI位图在打印模块中的实现219
9.10.1PostScript位图数据描述219
9.10.2PostScript位图操作221
9.11打印裁剪方案224
9.11.1裁剪区域运算224
9.11.2设置裁剪区域225
9.12字体的打印226
9.12.1字体打印所需的PostScript命令228
9.12.2PostScript字体字典229
9.12.3字体字典的构造230
9.12.4Pango,PostScript和Freetype的数据单位关系236
9.13小结237
第10章Unicode与国际化239
10.1基本概念240
10.1.1本地化、国际化与全球化240
10.1.2Locale241
10.1.3字符集244
10.1.4Unicode字符集245
10.2Windows系统和Linux系统中的字符集差别246
10.2.1Windows上的字符集246
10.2.2Linux上的字符集248
10.3Windows系统和Linux系统中的Unicode实现差别248
10.3.1Windows上的Unicode248
10.3.2Linux上的Unicode249
10.4ANSI/Unicode与窗口子系统249
10.4.1ANSI代码页249
10.4.2GetACP的实现方案分析250
10.4.3GetACP的实现251
10.4.4A/W窗口254
10.5字符串处理中需要注意的问题258
10.5.1大小写转换258
10.5.2字符串长度258
10.5.3字符串比较259
10.5.4分割字符259
10.6BiDi支持259
10.6.1BiDi的处理260
10.6.2BiDi处理函数实现261
10.7小结267
第11章国际化输入269
11.1概述270
11.2Windows中的国际化输入271
11.2.1输入上下文(InputContext)271
11.2.2输入法管理(IMM)272
11.2.3IME消息及消息过程273
11.3Linux中的国际化输入274
11.3.1Gtk输入上下文(GtkIMContext)275
11.3.2GtkIMContext发送的信号276
11.4模拟层国际化输入的架构277
11.5InputContext设计与实现278
11.5.1IMContext结构设计278
11.5.2ImmGetContext的实现280
11.5.3ImmAssociateContext的实现283
11.6IME组件的控制管理284
11.7与客户窗口的协作284
11.7.1过滤键盘事件284
11.7.2监听焦点改变事件285
11.7.3销毁输入法窗口285
11.7.4GTK信号的处理286
11.8小结287
第12章资源的移植289
12.1资源概述290
12.2资源移植的过程292
12.2.1资源编译工具的模拟293
12.2.2高级资源加载API311
12.2.3低级资源加载API312
12.3小结314
附录AHelloWorldWindows程序在Linux上的模拟315
附录BPostScript语言简介351
附录CLCID与ANSI代码页对应表359
参考文献364
索引365
(美) 强生 (Johnson,J.) , 著
(美) 劳拉·贝尔 (Laura Bell) , (美) 迈克尔·布来顿-斯帕尔(Michael Brunton-Spall), (美) 瑞切尔·史密斯 (Rich Smith) , (美) 吉姆·伯德 (Jim Bird) , 著
李先静, 编著
(美) 奥尔 (Auer,K.) , (美) 米勒 (Miller,R.) , 著
(美) 利斯科瓦 (Liskov,B.) 等, 著
(美) 斐亚德 (Fayad,M.E.) , (美) 约翰逊 (Johnson,R.E.) , 著
(美) 邓肯·德沃尔 (Duncan DeVore) , (美) 肖恩·沃尔什 (Sean Walsh) , (美) 布赖恩·哈纳非 (Brian Hanafee) , 著
(美) 布卢斯坦 (Bluestein,M.) , 著
张力展, 鲁韶华, 编著