第1章 图形基础编程 1
1.1 图形编程的基础知识 1
1.1.1 图形设备接口GDI 2
1.1.2 设备环境DC 2
1.1.3 设备环境类 2
1.1.4 GDI对象 8
1.1.5 使用库存GDI对象 9
1.2.1 OnDraw成员函数 10
1.2 在视图内绘图 10
1.1.6 DC与GDI设备之间的关系 10
1.2.2 Windows设备环境 11
1.3 与绘图相关的GDI对象类 11
1.3.1 CPen类 12
1.3.2 CBrush类 17
1.3.3 CFont类 20
1.3.4 CRgn类 23
1.3.5 CPalette类 28
1.4.1 Windows映射模式简介 29
1.3.6 CBitmap类 29
1.4 坐标变换和映射模式 29
1.4.2 如何设置映射模式 30
1.4.3 逻辑坐标和设备坐标的转换 33
1.4.4 窗口和视口 36
1.5 如何设置绘图模式 37
1.6 本章小结 39
第2章 各种图形元素的绘制 41
2.1 图形元素绘制的实现方法 41
2.1.1 绘制点、直线 41
2.1.2 绘制矩形 43
2.1.3 绘制简单曲线 44
2.1.4 绘制复杂曲线 48
2.1.5 绘制文本 48
2.2 使用鼠标绘图 53
2.2.1 如何响应鼠标消息 53
2.2.2 如何捕获和设置鼠标状态 55
2.2.3 用鼠标绘制各种基本图元 60
2.2.4 实现绘图的拖曳显示 66
2.3 图形的重画 68
2.3.1 全部重画 68
2.3.2 局部重画 69
2.3.3 如何解决闪屏现象 70
2.4 应用实例 70
2.4.1 实例1:绘制三次曲线 70
2.4.2 实例2:实现曲线的选取功能 75
2.4.3 实例3:在对话框中实现各种图形的绘制 78
2.5 本章小结 85
第3章 图形应用程序的设计思路 87
3.1 面向对象的图形应用程序设计 87
3.1.1 派生和继承 87
3.1.2 函数覆盖与重载 89
3.1.3 虚函数机制 93
3.1.4 多态性的应用 94
3.2.2 类的层次性 95
3.2.1 抽象基类 95
3.2 图形类的设计 95
3.2.3 图形类的构造和析构函数 96
3.2.4 基类CEntity 98
3.2.5 从CObject类派生 101
3.2.6 一个派生类CLine 102
3.3 数据结构和数学模型 103
3.3.1 数据结构 103
3.3.2 数学模型 107
3.4.1 框架内存分配 108
3.4 内存管理 108
3.4.2 堆内存分配 109
3.4.3 内存分配的应用实例 110
3.5 数据存储和文件管理 111
3.5.1 文件存储格式 111
3.5.2 序列化和反序列化 112
3.5.3 应用程序的不同版本 114
3.6.1 界面环境设计的原则 116
3.6 系统交互界面环境设计 116
3.5.4 数据交换文件 116
3.6.2 面向对象的消息响应机制 119
3.6.3 元素的拾取与选择方式 120
3.7 交互图形的辅助工具 122
3.7.1 栅格 122
3.7.2 动态导航 123
3.7.3 橡皮线 123
3.8 本章小结 123
第4章 小型图形系统的实现——图形的绘制 125
4.1 本书小型图形软件简介 125
4.1.1 传统图形软件的实现方法 125
4.1.2 本书图形软件的实现方法 126
4.2 图形软件的初步实现 126
4.2.1 建立工程VCad(Visual CAD的缩写) 126
4.2.2 加入命令和响应消息 127
4.2.3 软件基本变量及环境设置 129
4.3.1 关于Cpoint 131
4.3 位置类Position 131
4.3.2 基础类Position的实现 132
4.3.3 Position(世界坐标)和CPoint(屏幕坐标)的关系 137
4.4 基类CEntity和CCommand 139
4.4.1 图形基类CEntity 139
4.4.2 命令基类CCommand 142
4.5 直线的绘制 143
4.5.1 设置图形元素的绘制环境 143
4.5.2 直线类CLine 145
4.5.3 创建直线命令类CCreateLine 148
4.5.4 实现直线的绘制 152
4.5.5 关于重画问题 155
4.5.6 橡皮线功能的测试 156
4.6 矩形、圆和圆弧的绘制 158
4.7 文件存储及内存管理 158
4.7.1 文档的“脏”标记 158
4.7.2 释放图元链表的内存空间 159
4.7.3 文件的存储和加载 160
4.8 本章小结 163
5.1 给图元类添加编辑成员函数 165
5.1.1 在基类中添加成员函数 165
第5章 小型图形系统——图元编辑和缩放显示 165
5.1.2 在图元类添加成员函数 166
5.2 图元的包围盒计算 166
5.2.1 直线的包围盒计算 166
5.2.2 矩形和圆的包围盒计算 166
5.2.3 圆弧的包围盒的计算 167
5.3.1 拾取的精度 168
5.3 图元的拾取算法 168
5.3.2 直线的拾取 169
5.3.3 矩形的拾取 170
5.3.4 圆的拾取 171
5.3.5 圆弧的拾取 171
5.4 实现图元的选取 173
5.4.1 添加选择集 173
5.4.2 选择集的实现 174
5.4.3 图元的交互选取 177
5.5 图元的编辑算法 179
5.5.1 图元的移动 180
5.5.2 图元的旋转 181
5.5.3 图元的镜像 181
5.5.4 图元的删除 182
5.6 实现图元的交互编辑 182
5.6.1 添加编辑命令类 182
5.6.2 平移类的实现 183
5.6.3 旋转类的实现 187
5.6.4 镜像类的实现 193
5.6.5 图元的交互编辑 198
5.7 实现不同的显示方式 200
5.7.1 移动画面 201
5.7.2 键盘缩放画面 201
5.7.3 画面的局部缩放 202
5.7.4 满屏显示 203
5.8 本章小结 204
6.1.1 添加绘图和编辑工具栏以及视图工具栏 205
6.1 添加工具栏 205
第6章 小型图形软件系统——美化软件界面 205
6.1.2 添加属性工具栏 209
6.1.3 设置工具栏的位置 219
6.2 修改状态条 221
6.3 设置不同状态的光标 222
6.3.1 绘制状态时的光标 222
6.3.2 编辑状态时的光标 223
6.3.3 高亮提示时的光标 223
6.4 添加启动时的闪烁窗口 224
6.5 实现从Explorer启动和拖放 225
6.5.1 程序注册 226
6.5.2 在文档上双击鼠标左键 227
6.5.3 允许拖放 227
6.6 本章小节 228
7.1.1 位图与矢量图 229
第9章 图像的显示、变换及颜色处理 229
第7章 图像编程基础 229
7.1 图像基本概念和图像编码 229
7.1.4 彩色图像 230
7.1.2 单色图像 230
7.1.3 灰度图像 230
7.2 调色板的基本概念和应用 231
7.2.1 调色板的原理 231
7.2.2 调色板的创建 232
7.2.3 调色板使用方法 235
7.2.4 MFC中与系统调色板有关的消息 235
7.2.5 调色板的应用实例 237
7.3 依赖于设备的位图(DDB)和类CBitmap 241
7.3.1 位图的基本概念 241
7.3.2 DDB的创建 242
7.3.3 DDB的用途和显示 247
7.3.4 位图的部分显示 248
7.4本章小结 252
第8章 DIB位图及CDib类 253
8.1 与设备无关的位图DIB 253
8.1.1 Windows DIB位图的结构 253
8.1.2 OS/2 DIB结构 257
8.1.3 DIB位图的操作 258
8.1.4一个DIB位图的例子 267
8.2 CDib类 275
8.2.1 Win32 SDK的DIB API函数 275
8.2.2 构造CDib类 277
8.2.3 CDib类的使用 294
8.3 本章小结 297
9.1 图像显示处理 299
9.1.1 显示处理的基础 300
9.1.2 扫描 301
9.1.3 移动 306
9.1.4 百叶窗 311
9.1.5 栅条 314
9.1.6 马赛克 319
9.1.7 渐显 327
9.2 图像的几何变换处理 327
9.2.1 裁剪 328
9.2.3 缩放 332
9.2.2 平移 332
9.2.4 镜像 336
9.3 图像的颜色处理 340
9.3.1 图像的颜色处理理论 340
9.3.2 灰度化处理 340
9.3.3 亮度和对比度调整 343
9.4 本章小结 353
第10章 图形图像文件格式之间的转换 355
10.1 图形文件格式转换 355
10.1.1 常见图形文件格式 355
10.1.2 将自定义文件格式存为DXF格式 357
10.1.3 将图形文件存为图像文件 364
10.1.4 如何加载常见的图形文件格式 365
10.2 图像文件格式转换 365
10.2.1 常见图像文件格式 365
10.2.2 DDB转换为DIB 366
10.2.3 DIB转换为DDB 369
10.3 应用实例:在文件打开对话框中预览图形图像 370
10.3.1 生成预览位图——在内存位图中绘制图形 371
10.3.2 存取位图数据 373
10.3.3 在打开和保存文件对话框中显示位图 374
第11章 打印和打印预览 389
11.1 关于MFC的打印和打印预览 389
11.1.1 OnDraw函数 389
11.1.2 OnPrint函数 390
11.1.3 打印及打印预览过程 390
11.2.2 关于打印时的缩放 391
11.2 单页文档的打印 391
11.2.1单页文档打印的简单实例 391
11.3 多页文档的打印 392
11.3.1 设置映射模式 392
11.3.2 计算可打印区域 392
11.3.3 分页打印 393
11.4 位图的打印 400
11.5.1 创建新的位图类 403
11.5 所见即所得的打印:抓屏打印 403
11.5.2 实现新的位图类 408
11.6 本章小结 410
第12章 使用OpenGL开发图形图像 413
12.1 OpenGL简介 413
12.1.1 OpenGL函数的分类 413
12.1.2 OpenGL函数的功能 414
12.1.3 OpenGL的数据类型和函数名 415
12.2 使用VC++开发OpenGL应用程序 416
12.2.1 使用GLU和AUX函数 416
12.2.2 使用MFC和专用函数 420
12.2.3 两种开发方法之间的联系 427
12.3 基本绘制方法 427
12.3.1 清除窗口中的内容 427
12.3.2 绘制图原 428
12.3.3 设置颜色 432
12.3.4 设置图原的样式 435
12.4.1 如何在二维平面显出三维空间 439
12.4 变换 439
12.4.2 视点变换和模型变换 440
12.4.3 投影变换 444
12.4.4 视口变换 446
12.4.5 变换矩阵操作 447
12.5 光照与材质 447
12.5.1 现实世界与OpenGL光照 448
12.5.2 一个简单的光照实例 449
12.5.3 创建光源 451
12.5.4 多光源 453
12.5.5 选择光照模型 453
12.5.6 定义材质特性 454
12.5.7 漫射和环境反射 455
12.5.8 镜面反射 455
12.5.9 出射光 456
12.5.10 改变材质特性 456
12.6 图像处理 460
12.6.1 相关函数介绍 460
12.6.2 图像处理实例 462
12.6.3 基本知识 469
12.6.4 应用实例 470
12.7 本章小结 475
第13章 Directx简介 477
13.1 DirectDraw简介 477
13.1.1 什么是DirectX 477
13.1.2 DirectDraw的优越性 478
13.1.3 DirectDraw中的基本概念 478
13.1.5 DirectDraw的组成 480
13.1.4 DirectDraw的体系结构 480
13.2 Direct3D简介 481
13.2.1 什么是Direct3D 481
13.2.2 Direct3D的体系结构 482
13.2.3 Direct3D的组成 482
13.2.4 DirectDraw、 Direct3D、和Direct3D接口的关系 484
13.2.5 Direct3D的几何变换管道 484
13.2.6 Direct3D的设备类型 485
13.3 本章小结 486