本书介绍一种把Windows GUI应用程序移植到Linux的方法——API模拟方法。书中介绍了这种方法的设计思想,以及具体的实现过程。同时,充分探讨了GUI应用程序移植所必然面对的基于不同操作系统的编程模型的差异,揭示了两个系统有关用户界面交互和图形输出基本逻辑结构的一些鲜为人知的特性。全书共分为12章,包括:移植架构,GDI子系统,文本输出和字体管理,窗口子系统,消息子系统,用户输入,剪贴板和拖放,标准控件、菜单与对话框,打印,Unicode与国际化,国际化输入和资源的移植。本书起点较高,适合具有相当基础的软件开发人员、高年级计算机或相关领域的学生,以及那些可能需要为企业决策者提供技术和信息支持的架构师。由于本书是以GUI应用程序为背景来讲述的,所以对于任何在Windows和Linux系统之一进行应用程序开发或移植工作的工程师,以及任何C/C++程序员和工程师,都是一本具有较高参考价值的图书。
第1章 移植架构 11.1 移植架构的设计 21.2 API模拟层的结构 31.3 API模拟层的实现方法 41.3.1 X窗口系统 41.3.2 Display和X的服务器/客户机结构 51.3.3 窗口管理器 81.3.4 X事件 91.3.5 GDK和GTK 101.4 编译器差异 111.5 示例程序介绍 151.6 小结 15第2章 GDI子系统 172.1 Windows和Linux的图形用户界面输出比较 182.1.1 Windows的图形用户界面输出 182.1.2 Linux的图形用户界面输出 192.2 GDI模拟架构 192.2.1 高级GDI函数 202.2.2 GDI对象 212.2.3 输出设备 232.3 GDI对象详述 262.3.1 概述 262.3.2 位图对象(HBITMAP) 342.3.3 字体对象(HFONT) 382.3.4 裁剪区(HRGN) 382.3.5 笔和刷子(HPEN,HBRUSH) 402.4 屏幕输出 412.4.1 当前对象和绘图模式 412.4.2 屏幕设备和内存设备的差别 492.4.3 DCX_CLIPCHILDREN标志 532.4.4 私有设备上下文 542.4.5 图像输出 542.4.6 其他输出函数 572.5 元文件(metafile) 602.5.1 Windows元文件概述 602.5.2 生成元文件 622.5.3 播放元文件 642.6 小结 65第3章 文本输出和字体管理 673.1 文本输出 683.1.1 基本概念 683.1.2 格式化文本输出 703.1.3 非格式化文本输出 713.2 字体管理 763.2.1 字体管理的一般概念 763.2.2 Linux下的字体管理 783.2.3 GDI中的字体管理 793.2.4 几个关键API的模拟实现 803.3 小结 86第4章 窗口子系统 874.1 Windows和Linux的窗口系统比较 884.1.1 Windows的窗口系统 884.1.2 Linux的窗口系统 894.2 窗口类 904.2.1 窗口类数据结构 904.2.2 窗口类的注册和撤销 924.3 窗口和窗口句柄 934.3.1 窗口对象 934.3.2 窗口句柄 964.3.3 窗口的创建和销毁 974.4 窗口过程 1024.4.1 窗口过程的内部表示 1034.4.2 CallWindowProc 1044.4.3 DefWindowProc 1064.5 窗口绘图 1084.5.1 窗口关联的设备上下文 1084.5.2 窗口更新区域和重绘 1114.6 小结 114第5章 消息子系统 1155.1 Windows和Linux的消息系统比较 1165.2 消息队列 1165.3 消息的投递(Post) 1185.4 消息的发送(Send) 1185.5 消息的提取和分发 1195.6 Windows消息钩子(Hook) 1215.7 小结 124第6章 用户输入 1256.1 Windows和Linux的用户输入系统比较 1266.1.1 Windows的用户输入系统 1266.1.2 Linux的用户输入系统 1276.2 键盘输入 1286.2.1 将GDK键盘事件转换为Windows键盘事件 1286.2.2 从线程的用户输入队列中提取键盘消息 1306.3 键盘焦点 1306.3.1 Windows的焦点模型 1316.3.2 Linux的焦点模型 1316.3.3 模拟层键盘焦点系统的设计和实现 1336.4 字符消息 1356.5 插入符 1386.6 鼠标输入 1396.6.1 将GDK鼠标事件转换为Windows鼠标事件 1396.6.2 从线程的用户输入队列中提取鼠标消息 1416.6.3 鼠标光标 1426.7 小结 143第7章 剪贴板和拖放 1457.1 Windows剪贴板和Linux剪贴板的比较 1467.1.1 Windows剪贴板 1467.1.2 Linux剪贴板 1487.2 模拟层剪贴板的设计与实现 1537.2.1 剪贴板的管理 1537.2.2 格式的管理 1547.2.3 数据的交换 1557.3 模拟层中拖放的实现 1587.4 小结 160第8章 标准控件、菜单与对话框 1618.1 概述 1628.2 List Box 1638.2.1 List Box控件的风格 1638.2.2 List Box控件的设计与实现 1668.3 Edit 1688.3.1 Edit控件的风格 1688.3.2 Edit控件的消息 1698.3.3 Edit控件的设计与实现 1718.4 ComboBox 1768.4.1 ComboBox控件概述 1778.4.2 ComboBox控件消息的处理 1778.5 菜单 1838.5.1 菜单消息 1838.5.2 菜单模板资源 1848.5.3 菜单的设计与实现 1848.6 对话框 1898.6.1 对话框模板结构 1908.6.2 对话框的设计与实现 1918.7 小结 193第9章 打印 1959.1 Windows和Linux的打印比较 1969.1.1 Windows的打印系统 1969.1.2 Linux的打印系统 1969.2 模拟层打印模块的设计 1979.2.1 使用CUPS和打印机进行通信 1979.2.2 使用PostScript完成打印内容模拟 1979.3 模拟层打印模块架构 1999.4 获取打印机信息 2029.4.1 获取打印机数量 2029.4.2 获取打印机名称、打印机端口和打印机型号 2039.4.3 把PostScript文件送往打印机 2069.5 打印选项设置 2069.5.1 创建打印作业 2079.5.2 设置打印参数 2089.5.3 释放内存 2089.6 打印色彩管理 2099.6.1 Windows打印色彩管理 2099.6.2 模拟层打印模块中的色彩管理 2099.7 打印坐标系管理 2109.7.1 Windows逻辑坐标系和PostScript坐标系 2119.7.2 坐标系转化 2119.8 Windows GDI逻辑画笔在打印模块中的实现 2139.8.1 设置逻辑画笔的颜色和宽度 2139.8.2 设置逻辑画笔样式 2149.8.3 实例分析 2159.9 Windows GDI刷子在打印模块中的实现 2169.9.1 PostScript刷子图案定义 2169.9.2 PostScript刷子填充功能实现 2169.10 Windows GDI位图在打印模块中的实现 2199.10.1 PostScript位图数据描述 2199.10.2 PostScript位图操作 2219.11 打印裁剪方案 2249.11.1 裁剪区域运算 2249.11.2 设置裁剪区域 2259.12 字体的打印 2269.12.1 字体打印所需的PostScript命令 2289.12.2 PostScript字体字典 2299.12.3 字体字典的构造 2309.12.4 Pango, PostScript和Freetype的数据单位关系 2369.13 小结 237第10章 Unicode与国际化 23910.1 基本概念 24010.1.1 本地化、国际化与全球化 24010.1.2 Locale 24110.1.3 字符集 24410.1.4 Unicode字符集 24510.2 Windows系统和Linux系统中的字符集差别 24610.2.1 Windows上的字符集 24610.2.2 Linux上的字符集 24810.3 Windows系统和Linux系统中的Unicode实现差别 24810.3.1 Windows上的Unicode 24810.3.2 Linux上的Unicode 24910.4 ANSI/Unicode与窗口子系统 24910.4.1 ANSI代码页 24910.4.2 GetACP的实现方案分析 25010.4.3 GetACP的实现 25110.4.4 A/W窗口 25410.5 字符串处理中需要注意的问题 25810.5.1 大小写转换 25810.5.2 字符串长度 25810.5.3 字符串比较 25910.5.4 分割字符 25910.6 BiDi支持 25910.6.1 BiDi的处理 26010.6.2 BiDi处理函数实现 26110.7 小结 267第11章 国际化输入 26911.1 概述 27011.2 Windows中的国际化输入 27111.2.1 输入上下文(Input Context) 27111.2.2 输入法管理(IMM) 27211.2.3 IME消息及消息过程 27311.3 Linux中的国际化输入 27411.3.1 Gtk输入上下文(GtkIMContext) 27511.3.2 GtkIMContext发送的信号 27611.4 模拟层国际化输入的架构 27711.5 Input Context设计与实现 27811.5.1 IMContext结构设计 27811.5.2 ImmGetContext的实现 28011.5.3 ImmAssociateContext的实现 28311.6 IME组件的控制管理 28411.7 与客户窗口的协作 28411.7.1 过滤键盘事件 28411.7.2 监听焦点改变事件 28511.7.3 销毁输入法窗口 28511.7.4 GTK信号的处理 28611.8 小结 287第12章 资源的移植 28912.1 资源概述 29012.2 资源移植的过程 29212.2.1 资源编译工具的模拟 29312.2.2 高级资源加载API 31112.2.3 低级资源加载API 31212.3 小结 314附录A Hello World Windows程序在Linux上的模拟 315附录B PostScript语言简介 351附录C LCID与ANSI代码页对应表 359参考文献 364索引 365
《高端品牌是如何炼成的》内容简介:本书从六大视角解析高端品牌的底层逻辑。梦想法则和匠心法则,是塑造极具价值品牌产品的关键;
Photoshop专业抠图技法 本书特色 抠什么都不怕!半透明、不透明、动物、植物、人物,《Photoshop专业抠图技法》搞定一切图,绝对超高速。深入剖析了选...
《基于神经网络的智能诊断》共8篇,内容涉及神经网络智能诊断的产生、发展、现状与动向,复杂系统智能诊断问题的概念和策略;基于
本书是Objective-C领域的经典著作,对Objective-C进行了系统而全面的阐述,权威性毋庸置疑。全书共分为四大部分:第一部分全面讲
《曾国藩家书》内容简介:本书辑录了曾国藩在清道光30年至同治10年前后达30年的翰苑和从武生涯的书信一百六十余篇。家书涉及的内容
《LTE:UMTS长期演进理论与实践》系统、深入、全面地介绍了LTE的背景、动因和技术内容,涵盖了基本理论基础、物理层技术设计、网络
本书集中研究了信息服务的社会发展与管理机制,构建了面向用户的基于网络化、数字化的服务体系,讨论了信息推送、个性化服务、服
《温故(之六)》内容简介:《温故》是一种陆续出版的历史文化读物。以今天的视角来追怀与审视过去,并为当下的生存与未来的发展提
嵌入式与实时系统开发:使用UML、对象技术、框架与模式 本书特色 本书无疑是这一领域中创作的著作……每个人都可以把它作为教材和参考书。本书深入浅出地介绍实时系统...
本书从游戏是怎样一个行业到游戏业中形形色色的人;从细琐的技巧和算法,到游戏的结构和架构;从调试技巧到进度里程碑的创建和项
广告是一种商业活动,也是一门艺术,具有其他学科无法替代的独特性。在当今物质化、信息化并重的时代,如何形成一套更为有效的训
《虚拟机的设计与实现:CC++》内容简介描述了如何通过一系简单的步骤实现一个具有实用价值的运行时系统。对以下技术进行了深入的讨
《ASP.NET MVC 企业级实战》内容简介:ASP.NET MVC 是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序框架。MVC 将一个W...
《寻找白岩松》内容简介:作为知名新闻人,白岩松主流又“另类”。成名于1993年央视新闻评论部的电视改革,从《东方时空》到《新闻
《齐善鸿讲道德经》内容简介:如何轻松学到《道德经》的精髓? 如何打破艰难晦涩的语句直达道学根本? 如何在生活和工作中运用《道
《美国经典时装画技法》(基础篇)内容由浅显处入手,易学易懂,读后可基本掌握时装画技法要领,可操作性操,且画风具现代感。主要
《这个世界就分两种人》内容简介:本书为作者数年来撰写的各类杂文、散文和论说文的合集。文章不长,却极有锐度,往往令读者掩卷深
《礼义之邦》内容简介:礼仪是礼的形式,礼义则是礼的本质。所有礼仪活动或者礼仪程序的背后,都蕴含有特定的道德认同、价值导向、
《Odoo快速入门与实战:Python开发ERP指南》内容简介:本书包括基础篇、研发技术篇和实战篇,按照由基础到进阶,再到实战的顺序讲解
这是一部色彩理论和实际应用的通用指导,为艺术家和设计师提供一系列的色彩概念,条理清晰,简单易懂。斯蒂芬·潘泰克和理查德·