第Ⅰ部分 WINDOWS API编程:使用新的工具 3
第1章 计算机图形学及其应用 3
1.1 图形语言 3
1.1.1 图像感知过程 4
1.1.2 形象思维 5
1.2 图形技术 6
1.2.1 主要图形硬件 6
1.2.2 存储式电子管显示器 7
1.2.3 矢量刷新显示器 7
1.2.4 光栅扫描显示器 8
1.2.8 分辨率 10
1.2.7 色彩 10
1.2.6 亮度和对比度 10
1.2.5 图像特性 10
1.2.9 纵横比 11
1.2.10 显示元素的存取 11
1.2.11 多路复用和分时操作 12
1.2.12 内存映像 12
1.3 人类因素 13
1.3.1 视觉器官 13
1.3.2 视觉调节 14
1.3.3 人眼的运动 14
1.3.4 滞留 14
1.3.5 敏锐度 15
1.3.6 视野 15
1.3.7 眼睛疲劳 15
1.3.9 组合与眼睛疲劳 16
1.3.8 催眠效应 16
1.3.10 美学元素 17
1.3.11 组合和图形美 17
1.3.12 平衡和重量 17
1.3.13 形状和形式 18
1.3.14 图形和背景 19
1.3.15 空间感和深度感 20
1.3.161 光线与色彩 22
1.3.17 字符 23
1.4 计算机图形学的应用 24
1.4.1 工程技术 24
1.4.2 艺术设计 25
1.4.3 商业数据可视化 26
1.4.6 人工生命 27
1.4.5 游戏和娱乐 27
1.4.4 模拟训练 27
1.4.7 虚拟现实 28
1.4.8 分形图案 28
1.5 本章小结 29
第2章 事件驱动编程 31
2.1 图形操作系统 31
2.1.1 演变 31
2.1.2 Windows的各种版本 32
2.1.3 基于文本的和基于图形的程序 34
2.1.4 图形服务 35
2.2 编程模型 35
2.3 事件驱动程序 36
2.3.1 事件管理器 36
2.3.3 事件类型 37
2.3.2 事件处理程序 37
2.3.4 系统事件 38
2.3.5 控件事件 38
2.3.6 程序事件 38
2.4 事件模型 38
2.5 Windows程序的文件结构 39
2.5.1 源文件 39
2.5.2 库文件 40
2.5.3 资源文件 40
2.5.4 生成文件 41
2.5.5 目标文件 42
2.5.6 可执行文件 43
2.6 动态链接 45
2.7 Windows编程的特征 46
2.7.1 命名约定 49
2.7.2 数值常量 51
2.7.3 窗口句柄 51
2.8 Windows程序中的可视元素 52
2.8.1 主窗口 53
2.8.2 控件 54
2.8.3 其他可视化组件 54
2.9 编程风格 55
2.9.1 文件头注释 55
2.9.2 断言符号表示法 56
2.10 编程模板 57
2.11 本章小结 60
第3章 API编程 62
3.1.1 用模板创建工程 63
3.1 预备步骤 63
3.1.2 剖析Windows程序 67
3.1.3 WinMain() 67
3.1.4 参数 68
3.1.5 数据变量 69
3.1.6 WNDCLASSEX结构 69
3.1.7 注册窗口类 74
3.1.8 创建窗口 74
3.1.9 显示窗口 78
3.1.10 消息循环 78
3.2 窗口过程 79
3.2.1 窗口过程参数 80
3.2.3 消息处理 81
3.2.2 窗口过程变量 81
3.2.4 WM_CREATE消息处理 82
3.2.5 WM_PAINT消息处理 82
3.2.6 WM_DESTROY消息处理 83
3.2.7 默认的窗口过程 83
3.3 创建WinHello程序 84
3.3.1 修改程序标题 85
3.3.2 在客户区显示文本 85
3.3.3 创建程序资源 86
3.3.4 创建图标位图 87
3.4 本章小结 92
第4章 应用程序支持服务 93
4.1 Windows中的文本显示 93
4.2 设备和设备上下文 94
4.2.1 显示上下文 95
4.2.2 显示上下文类型 96
4.2.3 窗口显示上下文 98
4.3 映像模式 98
4.3.1 屏幕坐标、客户区坐标和窗口坐标 99
4.3.2 视区和窗口 100
4.4 文本操作编程 101
4.4.1 字样和字体 102
4.4.2 文本格式化 103
4.4.3 段落格式化 106
4.4.4 DrawText()函数 110
4.5 文本图形 113
4.5.1 选择字体 114
4.5.2 利用文本进行绘制 119
4.6.1 输入焦点 121
4.6 键盘输入 121
4.6.2 键击处理 122
4.6.3 确定键的状态 124
4.6.4 字符代码处理 125
4.6.5 键盘演示程序 126
4.7 插入符号 131
4.7.1 插入符号处理 131
4.7.2 插入符号演示程序 132
4.8 本章小结 135
第5章 图形支持服务 137
5.1 鼠标编程 137
5.1.1 鼠标消息 138
5.1.2 指针位置 140
5.1.3 鼠标双击处理 141
5.1.5 光标 142
5.1.4 捕获鼠标 142
5.1.6 鼠标和光标的演示程序 145
5.2 窗口风格和控件 147
5.2.1 子窗口 148
5.2.2 子窗口演示程序 149
5.2.3 基本控件 152
5.2.4 与控件通信 156
5.2.5 控件演示程序 161
5.3 菜单 164
5.3.1 创建菜单 166
5.3.2 菜单项目处理 167
5.3.3 快捷键 168
5.3.4 弹出式菜单 170
5.4.1 模态和非模态 172
5.4 对话框 172
5.3.5 菜单演示程序 172
5.4.2 消息框 173
5.4.3 创建模态对话框 175
5.4.4 创建非模态对话框 177
5.4.5 通用对话框 180
5.4.6 对话框演示程序 183
5.5 通用控件 183
5.5.1 常用控件消息处理 185
5.5.2 工具栏和工具提示 186
5.5.3 创建工具栏 186
5.5.4 标准工具栏按钮 192
5.5.5 工具栏中的组合框 194
5.5.6 工具提示支持 195
5.6 本章小结 198
第Ⅱ部分 API图形 201
第6章 绘制像素、直线和曲线 201
6.1 在窗口中进行绘图 201
6.1.1 重绘责任 202
6.1.2 无效矩形 203
6.1.3 设计立即响应式屏幕更新 203
6.1.4 WM_PAINT消息截取 204
6.2 图形设备接口 207
6.2.1 设备上下文属性 207
6.2.2 DC Info演示程序 211
6.2.3 设备上下文中的颜色 214
6.3 图形对象和GDI属性 215
6.3.1 画笔 215
6.3.2 画刷 218
6.3.3 前景混合模式 219
6.3.4 背景模式 220
6.3.5 当前画笔位置 221
6.3.6 圆弧方向 221
6.4 绘制像素、直线和曲线 222
6.4.1 像素操作 223
6.4.2 使用LineTo()绘图 224
6.4.3 使用PolylineTo()绘图 224
6.4.4 使用Polyline()绘图 225
6.4.5 使用PolyPolyline()绘图 226
6.4.6 使用Arc()绘图 227
6.4.7 使用ArcTo()绘图 228
6.4.8 使用AngleArc()绘图 228
6.4.9 使用PolyBezier()绘图 230
6.4.10 使用PolyBezierTo()绘图 233
6.4.11 使用PolyDraw()绘图 234
6.4.12 像素和直线的演示程序 239
6.5 本章小结 240
第7章 封闭的区域、图形和路径 241
7.1 封闭图形和区域 242
7.1.1 画刷初始位置 242
7.1.2 对象选择宏 244
7.1.3 多边形填充模式 244
7.1.4 创建定制画刷 246
7.2 绘制封闭图形 247
7.2.1 使用Rectangle()绘图 248
7.2.2 使用RoundRect()函数绘图 249
7.2.3 使用Ellipse()绘图 250
7.2.4 使用Chord()绘图 251
7.2.5 使用Pie()绘图 252
7.2.6 使用Polygon()绘图 253
7.2.7 使用PolyPolygon()绘图 254
7.3 对矩形的操作 256
7.3.1 使用FillRect()绘图 256
7.3.2 使用FrameRect()绘图 258
7.3.3 使用DrawFocusRect()绘图 258
7.3.4 对矩形的辅助操作 259
7.3.5 更新Rectangle()函数 265
7.4 区域 265
7.4.1 创建区域 267
7.4.2 合并区域 269
7.4.3 填充区域并为区域着色 271
7.4.4 区域操作 272
7.4.5 获得区域数据 274
7.5 剪切操作 275
7.5.1 创建和修改剪切区域 276
7.5.2 获得剪切区域信息 279
7.6 路径 280
7.6.1 创建、删除和转化路径 282
7.6.2 路径渲染操作 283
7.6.3 路径处理 285
7.6.4 得到路径信息 287
7.7 填充图形演示程序 288
7.8 本章小结 289
8.1.1 位图 290
8.1 光栅和矢量图形 290
第8章 位图化图形 290
8.1.2 图像处理 292
8.1.3 Bitblt(位块传输)操作 292
8.2 Windows位图的创建 292
8.2.1 位图格式 293
8.2.2 位图结构 294
8.2.3 作为资源的位图 294
8.3 位图编程概述 295
8.3.1 创建内存设备上下文 295
8.3.2 选定位图 296
8.3.3 获得位图尺寸 296
8.3.4 对位图进行位块传输 297
8.3.5 开发位图显示函数 299
8.4.1 对单色位图的硬编码 300
8.4 位图操作 300
8.4.2 堆式内存中的位图 303
8.4.3 对空白位图的操作 308
8.4.4 创建DIB部分 310
8.4.5 创建图案画刷 315
8.5 位图变换 315
8.5.1 图案画刷传输 316
8.5.2 位图的拉伸和压缩 317
8.5.3 位图演示程序 320
8.6 本章小结 320
第Ⅲ部分 DirectDraw编程 323
第9章DirectDraw概念 323
9.1 游戏和Windows编程 323
9.2.1 获取和安装SDK 324
9.2 DirectX 6SDK 324
9.2.2 编译器支持 325
9.2.3 测试安装 325
9.2.4 DirectX的组件 326
9.2.5 DirectX和COM 327
9.3 DirectDraw概述 327
9.3.1 DirectDraw的特性 328
9.3.2 优点和缺点 328
9.4 DirectDraw的体系结构 329
9.4.1 DirectDraw接口 329
9.4.2 对象组成 329
9.4.3 硬件抽象层(HAL) 330
9.4.4 硬件仿真层(HEL) 331
9.4.5 组件关系 331
9.5.2 显示模式 332
9.5.1 协作等级 332
9.5 DirectDraw的基本概念 332
9.5.3 表面 333
9.5.4 调色板 335
9.5.5 剪切 336
9.6 配置DirectDraw 338
9.6.1 设置Developer Studio 338
9.6.2 创建DirectDraw对象 339
9.6.3 检索接口版本 340
9.6.4 设置协作等级 343
9.6.5 获得硬件性能 345
9.6.6 获得显示模式 354
9.7 DirectDraw的Info Demo工程 358
9.8 本章小结 360
10.1 DirectDraw WinMain()函数 361
第10章 访问视频内存 361
10.1.1 WinMain()主干 362
10.1.2 DirectDraw初始化 364
10.1.3 DD模板工程 371
10.2 直接访问式编程 372
10.2.1 内存映射式视频 372
10.2.2 以高彩(Hi-color)模式进行映射 373
10.2.3 真彩模式 374
10.2.4 锁定表面 375
10.2.5 读取锁定表面数据 376
10.3 用于直接访问的低级编码 378
10.3.1 _asm关键字 378
10.3.2 编码限制 379
10.3.3 汇编语言函数 380
10.4 开发直接访问式基本函数 381
10.4.1 像素地址计算 382
10.4.2 直接访问式锁定函数 382
10.4.3 直接访问式释放函数 383
10.4.4 直接访问式像素级函数 384
10.4.5 矩形填充函数 387
10.4.6 方框绘制函数 389
10.5 直接访问中的光栅操作 393
10.5.1 XOR动画 394
10.5.2 对位图进行“异或”操作(XOR) 395
10.6 DirectDraw访问演示工程 398
10.7 本章小结 398
11.1 重新讨论表面 399
第11章 渲染操作 399
11.1.1 表面操作 400
11.1.2 主表面和离屏表面 401
11.1.3 列举表面 402
11.1.4 丢失和恢复表面 405
11.1.5 表面练习 406
11.2 透明和颜色键 407
11.2.1 设置颜色键 409
11.2.2 颜色键支持 411
11.3 DirectDraw的位块传输 412
11.3.1 BltFast() 413
11.3.2 Blt() 414
11.3.3 Blt()与BltFast()的比较 417
11.4 位块传输时的变换 417
11.4.2 缩放 418
11.4.1 颜色填充 418
11.4.3 镜像 419
11.4.4 光栅操作 420
11.5 渲染Windows位图 420
11.5.1 载入位图 421
11.5.2 获取位图信息 424
11.5.3 将位图载入到表面 424
11.5.4 显示位图 426
11.6 DirectDraw窗口式应用程序 428
11.6.1 非独占模式的初始化 429
11.6.2 剪切主表面 431
11.7 在非独占模式DirectDraw中的渲染 434
11.7.1 通过剪切进行渲染 435
11.7.2 通过位块传输时修剪进行渲染 440
11.8 本章小结 443
第12章DirectDraw动画 444
12.1 动画基础 444
12.1.1 实时动画 445
12.1.2 图像表面撕裂 445
12.1.3 动画制作人员的困境 446
12.2 取得时控脉冲 447
12.2.1 时钟计数(Tick-counting)方法 447
12.2.2 系统定时器截取 449
12.3 子图形(Sprite)动画 450
12.3.1 三维子图形艺术 451
12.3.2 子图形的图像集 452
12.3.3 子图形渲染 453
12.4 交换 457
12.4.1 对交换表面进行初始化 459
12.4.2 交换操作 460
12.4.3 多缓冲 462
12.5 交换动画编程 464
12.5.1 背景动画 464
12.5.2 摇摄全景(panning)动画 465
12.5.3 缩放动画 467
12.5.4 子图形操作 469
12.6 动画性能调谐 474
12.6.1 最佳选项(best-option)处理 474
12.6.2 高分辨率定时器 478
12.6.3 不洁矩形(Dirty Rectangles) 480
12.6.4 动态颜色键 481
12.6.5 测量性能 484
12.7 本章小结 486
第Ⅳ部分 DirectX图形支持 489
第13章DirectX升级和安装 489
13.1 DirectX升级工具 489
13.1.1 DirectSetup组件 490
13.1.2 可重新分配的软件包 490
13.1.3 卸载DirectX驱动程序 491
13.2 使用DirectSetup 492
13.2.1 预备步骤 492
13.2.2 安装模式 493
13.3 DirectX安装的准备 493
13.3.1 获得SDK的版本 494
13.3.2 升级决策 496
13.4 安装DirectX 496
13.4.1 DirectXSetup()函数 497
13.4.2 正常安装 498
13.5 定制安装 500
13.5.1 创建回调函数 501
13.5.2 回调函数 501
13.5.3 消息截取编码 503
13.5.4 沉默安装 508
13.6 本章小结 509
第14章 独占模式应用程序中的输入 510
14.1 DirectInput组件 510
14.1.1 DirectInput的体系结构 511
14.1.2 DirectInput和Windows 511
14.1.3 DirectInput支持 512
14.2 DirectInput的准备 512
14.2.1 列举设备 513
14.2.2 创建设备 516
14.2.3 数据格式 517
14.2.4 协作等级 518
14.2.5 获取设备 520
14.3 得到并设置设备信息 522
14.3.1 SetProperty() 522
14.3.2 GetProperty() 524
14.3.3 设备属性结构 524
14.4 获得设备数据 528
14.4.1 输入数据类型 528
14.4.2 事件通告和轮询 531
14.5 对DirectInput进行实验 531
14.5.1 Diquick程序 532
14.6 本章小结 534
14.5.2 DI鼠标演示程序 534
第15章 多适配器和多显示器 535
15.1 多显示器环境下的图形 535
15.1.1 用户的看法 536
15.1.2 程序员的看法 536
15.2 Windows和DirectX支持 537
15.2.1 虚拟桌面 537
15.2.2 安装和设置多显示器 538
15.3 Windows 98的Multi-monitormnAPI 539
15.3.1 获得显示器的句柄 540
15.3.2 列举多显示器 541
15.3.3 获得显示器的信息 543
15.3.4 列举多显示设备 544
15.4.1 Multimon.h头文件 545
15.4 Windows 98中的多显示器编程 545
15.4.2 获得系统信息 546
15.4.3 控制视频输出 549
15.4.4 针对多显示器意识的编程 551
15.5 DirectX 6中的多显示器编程 552
15.5.1 在DirectX中列举多个设备 553
15.5.2 设备指定的DirectDraw对象 557
15.5.3 设置焦点和设备窗口 557
15.5.4 MM Sprite Demo工程程序 559
15.6 调试DirectDraw应用程序 559
15.7 本章小结 560
附录A Windows和DirectX结构 561
附录B 三目光栅操作代码 577
附录C 配套光盘内容 585