译者序
前言
第1章 基本技术和知识
1.1 用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 汇编语言
1.3 程序开发环境
1.3.1 开发与测试系统
1.3.2 编译器
1.3.3 Microsoft平台软件开发工具
1.3.4 Microsoft驱动程序开发工具
1.3.5 Microsoft开发网络库
1.4 Win32可执行文件格式
1.4.1 导入目录
1.4.2 导出目录
1.5 Microsoft Windows操作系统的体系结构
1.5.1 硬件抽象层
1.5.2 微内核
1.5.3 设备驱动程序
1.5.4 窗口管理和图形系统
1.5.5 执行体
1.5.6 系统服务:Windows本身的API
1.5.7 系统进程
1.5.8 服务
1.5.9 环境子系统
1.6 小结
1.6.1 其他参考文献
1.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.1 从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.1 图形引擎系统服务
2.5.2 图形绘制引擎
2.5.3 图形引擎数据结构
2.5.4 图元变换
2.5.5 字体驱动程序
2.6 显示驱动程序
2.6.1 视频端口驱动程序和视频微端口驱动程序
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.1 范例程序
2.8.2 其他参考文献
第3章 GDI/DirectDraw内部数据结构
3.1 句柄和面向对象的编程
3.1.1 类和对象
3.1.2 封装和信息隐藏
3.1.3 指针与句柄
3.1.4 全等映射
3.1.5 基于表格的映射
3.1.6 只有句柄是不够的
3.2 解码GDI对象句柄
3.2.1 对象句柄堆是不变的
3.2.2 HGDIOBJ并不是指针
3.2.3 进程GDI句柄限制约为12000个
3.2.4 系统GDI句柄限制约为16384个
3.2.5 HGDIOBJ的部分内容为索引值
3.2.6 HGDIOBJ的部分内容是GDI对象类型
3.3 定位GDI对象句柄表
3.4 解码GDI对象句柄表
3.4.1 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.1 用户模式画刷数据:纯色画刷优化
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.1 其他参考文献
3.10.2 范例程序
第4章 Windows图形系统窥视
4.1 Win32 API调用窥视
4.1.1 做一个窥视程序
4.1.2 嵌入窥视DLL
4.1.3 钩入API调用链
4.1.4 信息收集
4.1.5 数据转储
4.1.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.1 帧缓冲区
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.1 其他参考文献
5.6.2 范例程序
第6章 坐标空间和变换
6.1 物理设备坐标空间
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.1 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.1 其他参考文献
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.1 用角度来指定弧线: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.1 其他参考文献
8.9.2 范例程序
第9章 区域
9.1 画刷
9.1.1 逻辑画刷对象
9.1.2 库存画刷
9.1.3 自定义画刷
9.1.4 系统颜色画刷
9.1.5 LOGBRUSH结构
9.2 矩形
9.2.1 作为数据结构的矩形
9.2.2 绘制矩形
9.2.3 边界线和控制点的绘制
9.3 椭圆、弦、饼状图以及圆角矩形
9.4 多边形
9.5 闭合路径
9.6 区域
9.6.1 创建区域对象
9.6.2 区域对象上的操作
9.6.3 使用区域绘图
9.7 渐变填充
9.7.1 矩形的渐变填充
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.1 其他参考文献
9.9.2 范例程序
第10章 位图基础
10.1 设备无关的位图格式
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.1 显示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.1 其他参考文献
10.8.2 范例程序
第11章 高级位图图形学
11.1 三元光栅操作
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.1 用几何图形作为屏蔽
11.3.2 用裁剪作为屏蔽
11.3.3 预先生成图像
11.4 alpha混合
11.4.1 简单常量alpha混合
11.4.2 位图的淡入谈出
11.4.3 层叠窗口
11.4.4 alpha通道:AirBrush
11.4.5 模拟alpha混合
11.5 小结
11.5.1 其他参考文献
11.5.2 范例程序
第12章 用Windows位图进行图像处理
12.1 通用像素存取
12.2 位图affine变换
12.3 快速专用位图变换
12.4 位图颜色变换
12.4.1 将位图转换为灰度位图
12.4.2 gamma校正
12.5 位图像素变换
12.5.1 通用像素变换类
12.5.2 通用通道分离类
12.5.3 通道分高举例
12.5.4 直方图
12.6 位图空间过滤器
12.6.1 平滑过滤器和锐化过滤器
12.6.2 边缘检测和浮雕过滤器
12.6.3 变形过滤器
12.7 小结
12.7.1 其他参考文献
12.7.2 范例程序
第13章 调色板
13.1 系统调色板
13.1.1 显示设置
13.1.2 查询系统调色板
13.1.3 静态颜色
13.2 逻辑调色板
13.2.1 缺省调色板
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.1 设备相关位图和调色板
13.4.2 设备无关的位图和调色板
13.4.3 DIB颜色表中的调色板索引
13.4.4 DIB段和调色板
13.5 颜色的量化
13.6 减少位图颜色深度
13.7 小结
13.7.1 其他参考文献
13.7.2 范例程序
第14章 字体
14.1 什么是字体
14.1.1 字符集和代码页
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.1 字体资源文件
14.5.2 安装公用字体
14.5.3 安装专用字体和Multiple MasterOpenType字体
14.5.4 从内存映像中安装字体
14.5.5 字体的内嵌
14.5.6 系统字体列表
14.6 小结
14.6.1 其他参考文献
14.6.2 范例程序
第15章 文本
15.1 逻辑字体
15.1.1 微软印刷学术语
15.1.2 库存字体
15.1.3 创建逻辑字体
15.1.4 逻辑字体到物理字体映射
15.1.5 PANOSE字面匹配
15.2 查询逻辑字体
15.2.1 位图字体和矢量字体的度量
15.2.2 True/OpenType字体度量
15.2.3 浏览LOGFDNT和字体度量
15.2.4 字体度量的准确度
15.3 简单文本绘制
15.3.1 对齐文本
15.3.2 从右到左的布局与阅读方式
15.3.3 字符附加量和分割符附加量
15.3.4 字符宽度
15.4 高级文本绘制
15.4.1 字符到图元的映射
15.4.2 字距调整
15.4.3 布置字符
15.4.4 扩展的文本绘制
15.4.5 Uniscribe
15.4.6 图元存取
15.5 格式化文本
15.5.1 带制表符的文本绘制
15.5.2 简单段落格式化
15.5.3 设备无关的文本格式化
15.6 文本特效
15.6.1 文本着色
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.1 元文件基础
16.1.1 创建增强元文件
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.1 用于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.1 其他参考文献
16.5.2 范例程序
第17章 打印
17.1 理解打印池程序
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.1 打印通用对话框
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.1 坐标空间单位
17.4.2 文本
17.4.3 位图
17.4.4 JPEG图像打印
17.5 小结
17.5.1 其他参考文献
17.5.2 范例程序
第18章 DirectDraw和 Direct3D立即模式
18.1 组件对象模型
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.1 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.1 像素绘制
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.1 创建Direct3D立即模式环境
18.4.2 处理窗口大小变化
18.4.3 两步绘制
18.4.4 将Direct3D放在窗口中
18.4.5 纹理表面
18.4.6 Direct3D立即模式举例
18.5 小结
18.5.1 其他参考文献
18.5.2 范例程序