第1章 VC++开发GIS系统的思路 1
1.1 GIS系统简介 1
1.1.1 GIS系统的应用领域和范围 1
1.1.2 GIS系统与其他系统的结合 1
1.1.3 GIS系统的专业开发工具 2
1.1.4 GIS系统专业开发工具的优缺点 3
1.1.5 VC++开发GIS系统的优缺点及应用前景 4
1.1.6 选用GIS系统的开发方法 5
1.2 VC++开发GIS系统的思路 5
1.2.1 开发相对完整的矢量图形系统 5
1.2.2 开发数据库管理系统 6
1.2.3 建立矢量图形系统与数据库管理系统的连接 7
1.2.4 开发各种查询、空间信息统计和分析功能 7
1.2.5 开发多用户GIS系统 7
第一篇 VC++程序设计技术要点 11
第2章 MFC应用程序设计必须或辅助使用的几个开发工具 11
2.1 使用MFC AppWizard 12
2.1.1 MFC AppWizard的启动 12
2.1.2 利用MFC AppWizard产生MFC应用程序的步骤 14
2.2 使用classview 18
2.2.1 启动ClassView 18
2.2.2 编辑定位 18
2.2.3 增加类 19
2.2.4 增加类的成员 22
2.3 使用ResourceView 23
2.3.1 ResourceView的调用 24
2.3.2 ResourceView工作分析 24
2.4 使用FileView 27
2.4.1 打开一个程序项目 28
2.4.2 FileView相关的操作功能 28
2.5 使用ClassWizard 30
2.5.1 Windows消息 30
2.5.2 消息处理函数 31
2.5.3 ClassWizard的作用的启动 33
2.5.4 ClassWizard管理消息处理函数 34
2.5.5 ClassWizard管理重载虚函数 38
2.5.6 ClassWizard管理映射变量 40
2.5.7 管理Automation和ActiveX事件 44
2.5.8 重新构造开发项目的ClassWizard工作信息 44
2.6 使用DataView 45
2.7 管理多个程序项目 45
2.8 使用各设计工具进行编程的几点建议 47
第3章 MFC应用程序框架剖析 49
3.1 MFC程序基本框架类和文件组成 49
3.1.1 基本程序框架类 49
3.1.2 应用程序主要源文件组成 50
3.2 MFC应用程序中各个框架类的作用 51
3.3 MFC应用程序的执行步骤分析 52
3.4 MFC应用程序设计结构体系剖析 55
3.4.1 标准菜单的执行分析 55
3.4.2 修改标准菜单执行功能 57
3.4.3 MFC应用程序多态性的实现 58
3.4.4 MFC应用程序中各个框架类对象的相互调用关系 59
第二篇 基本矢量图形系统 65
第4章 与图形操作有关的MFC类及操作 65
4.1 绘图类 65
4.1.1 绘图类简介 65
4.1.2 几个绘图类的主要差别 66
4.1.3 绘图类的使用方法 67
4.2 绘图设备类 68
4.2.1 CGdiObject类 68
4.2.2 CPen类 68
4.2.3 CBrush类 70
4.2.4 CFont类 73
4.2.5 CRgn类 76
4.2.6 CPalette和CBitmap类 81
4.3 坐标映像方式 82
4.3.1 Windows映像方式及其设置方法 82
4.3.2 逻辑坐标和设备坐标的转换 83
4.4 窗口和视口 84
4.4.1 窗口和视口的概念 84
4.4.2 窗口和视口有关的操作函数 84
4.4.3 窗口逻辑坐标与视口设备坐标的转换 85
4.5 其他绘图类操作函数 88
4.5.1 选用绘图设备对象 88
4.5.2 主要绘图属性设置函数 89
第5章 实现基本矢量图形系统的文档和视图 92
5.1 组织矢量图形系统的图形元素类 92
5.1.1 图形元素基类的组织 92
5.1.2 直线类组织 93
5.1.3 连续直线或封闭多边形类组织 94
5.1.4 圆类组织 95
5.1.5 圆弧类组织 96
5.1.6 标注文本类 97
5.1.7 图形参数类 97
5.2 组织矢量图形系统的文档 99
5.2.1 组织面向对象的文档存储管理机制 99
5.2.2 利用MFC模板定义管理图形元素对象指针的对象 100
5.2.3 实现矢量图形系统的文档 100
5.2.4 实现文档的管理功能 101
5.3 实现矢量图形系统的视图 107
5.3.1 建立坐标系 107
5.3.2 实现各图形元素类的绘制函数 112
5.3.3 视图类的OnDraw函数 121
5.3.4 实现视图 122
第6章 鼠标交互绘图 124
6.1 用鼠标绘图要解决的主要问题 124
6.1.1 捕捉鼠标操作消息 124
6.1.2 捕捉所有的鼠标输入 126
6.1.3 在屏幕上拖动图形 126
6.1.4 保存图形数据到文档 126
6.1.5 将图形以实际的形态重画 126
6.2 加入一个绘图菜单 127
6.2.1 增加菜单资源 127
6.2.2 增加菜单的消息处理函数 128
6.3 交互绘制各种图形元素 130
6.3.1 获得图形元素的唯一识别号 130
6.3.2 绘制直线 132
6.3.3 绘制连续直线和多边形区域 135
6.3.4 绘制圆和圆形区域 138
6.3.5 绘制圆弧 141
6.4 交互绘制标注文本 148
6.4.1 对话框简介 148
6.4.2 交互绘制标注文本的过程 149
6.4.3 创建对话框资源 149
6.4.4 实现文本标注对话框类 150
6.4.5 实现标注文本交互绘制功能 154
第7章 矢量图形系统的操作功能 158
7.1 增加图形操作菜单 158
7.1.1 增加菜单资源 158
7.1.2 增加消息处理函数 159
7.2 图形重画 160
7.2.1 全屏重画 160
7.2.2 局部重画 161
7.3 图形放大和移动 162
7.3.1 图形放大和移动 162
7.3.2 图形放大和移动功能的实现 163
7.4 重画上屏和重画首屏 167
7.4.1 记录屏幕状态 167
7.4.2 实现重画上屏和重画首屏功能 170
7.5 显示全图 171
7.5.1 各类图形元素的边界矩形计算 171
7.5.2 实现显示全图功能 176
7.6 提高矢量图形系统重画速度的基本方法 178
7.6.1 提高图形重画速度的方法 178
7.6.2 提高图形重画速度的实现方法 179
7.6.3 加快图形元素的绘制速度 180
7.7 实现滚动视图 181
7.7.1 滚动视图的实现方法 181
7.7.2 滚动区域参数设置 181
7.8 定制图形滚动功能 183
7.8.1 确定滚动步长 183
7.8.2 创建滚动条 184
7.8.3 实现图形滚动功能 184
第8章 图形的删除和恢复 190
8.1 鼠标点选图形元素 190
8.1.1 各种图形元素的选中区域 190
8.1.2 各种图形元素的点选判断函数 195
8.1.3 选中图形元素的特殊显示 199
8.1.4 实现点选图形元素功能 199
8.1.5 放弃选中的图形元素 205
8.1.6 图形元素的显示和选中顺序 205
8.2 图形元素的删除 206
8.2.1 删除操作的类型 206
8.2.2 从屏幕上删除图形元素的方法 207
8.2.3 各类图形元素的删除操作 208
8.2.4 实现图形元素删除操作 212
8.3 文档操作逆向化 213
8.3.1 逆向操作的含义 213
8.3.2 记录文档编辑操作过程 214
8.3.3 实现文档逆向操作 220
8.3.4 实现操作过程的完全逆向化 222
第9章 图形的存取功能 223
9.1 利用串行化存取文档 223
9.1.1 CArchive类及CArchive对象的创建 223
9.1.2 Serialize函数 225
9.1.3 CObArray类的Serialize函数 227
9.2 实现矢量图形系统的存取功能 228
9.2.1 实现各个图形元素类的串行化 228
9.2.2 MFC框架程序的文档串行化机制 232
9.2.3 实现矢量图形系统的文档存取功能 233
9.2.4 SetModifiedFlag函数 235
第10章 矢量图形系统的其他功能 238
10.1 图形块管理 238
10.1.1 组织管理图形块 238
10.1.2 组织图例 240
10.1.3 创建图形块的方法 241
10.2 管理各种图形参数 242
10.2.1 管理颜色 242
10.2.2 管理图层 243
10.2.3 管理线型 246
10.2.4 增加辅助绘图模式 246
10.3 图形的打印输出 247
10.3.1 视图的打印机理 247
10.3.2 打印功能的实现方法 248
10.4 与AutoCAD的DXF文件的接口 251
10.4.1 与AutoCAD接口的条件 251
10.4.2 实现与DXF文件的接口功能 251
第三篇 数据库管理系统 259
第11章 开发数据库应用程序的基础知识 259
11.1 关系数据库简介 259
11.1.1 关系数据库的概念 259
11.1.2 关系数据库的基本术语 260
11.2 SQL语言简介 261
11.2.1 选择子式 262
11.2.2 过滤子式 264
11.2.3 排序子式 265
11.3 ODBC及创建ODBC数据源的方法 267
11.3.1 ODBC简介 267
11.3.2 VC++中使用ODBC的方法 268
11.3.3 创建ODBC数据源 268
第12章 数据库应用程序开发技术 275
12.1 创建基于ODBC的数据库应用程序 275
12.1.1 创建一个ODBC数据源 275
12.1.2 MFC AppWizard创建一个数据库应用程序的步骤 276
12.2 CRecordSet类功能分析 277
12.2.1 连接数据源和创建记录集合 278
12.2.2 与记录集合的数据交换 281
12.2.3 打开和关闭记录集合对象 282
12.2.4 过滤记录集合 283
12.2.5 排序记录集合 285
12.2.6 移动指向记录集合的记录指针 287
12.2.7 修改记录集合 290
12.2.8 CRecordSet类的其他操作功能 292
12.2.9 MFC ClassWizard管理CRecordSet派生类 295
12.3 CRecordView视图类分析 299
12.3.1 CRecordView视图类 299
12.3.2 CRecordView视图对象与记录集合对象的联系 301
12.3.3 MFC ClassWizard管理CRecordView派生类 302
12.3.4 视图控制与记录集合数据交换过程剖析 307
12.4 基本数据库管理功能实现剖析 310
12.4.1 浏览功能 310
12.4.2 增加一个操作菜单 316
12.4.3 记录编辑功能 318
12.4.4 数据库过滤功能 321
12.4.5 数据库排序功能 324
12.5 DAO数据库应用程序设计 325
第13章 使用DataView管理数据源 328
13.1 合建Database Project 328
13.1.1 创建Database Project的目的 328
13.1.2 用AppWizard创建Database Project 329
13.2 使用DataView管理数据源的普通功能 330
13.2.1 浏览数据库的组成和结构 330
13.2.2 Query工具条功能介绍 331
13.2.3 组织Select操作 334
13.2.4 组织SQL的Insert操作 337
13.2.5 组织SQL的Insert Value操作 338
13.2.6 组织SQL的Update操作 339
13.2.7 组织SQL的Delete操作 340
13.2.8 组织SQL的Make Table操作 341
13.3 DataView管理SQL数据库 342
13.3.1 针对SQL Server数据源的Database Project 342
13.3.2 创建数据表和修改数据表结构 343
13.3.3 新建数据视图或修改已有的数据视图结构 344
13.3.4 创建和使用存储过程 345
13.3.5 创建和使用数据库图表 348
13.3.6 Database Diagram工具条功能 349
第14章 实现数据库浏览功能 353
14.1 创建一个数据库浏览视图 353
14.1.1 视图的创建过程 353
14.1.2 创建另外一类视图的步骤 355
14.1.3 在矢量图形系统中创建数据库浏览视图 358
14.2 创建一个CRecordSet派生类对象 365
14.2.1 创建一个ODBC数据源 365
14.2.2 创建管理记录集合的CRecordSet派生类 366
14.2.3 创建记录集合对象 371
14.3 实现数据库浏览视图 371
14.3.1 建立视图与记录集合对象的联系 371
14.3.2 获得数据库浏览视图的滚动区域 372
14.3.3 实现数据库浏览视图 374
第15章 实现数据库编辑功能 379
15.1 在数据库浏览视图中建立记录指针 379
15.2 建立数据库编辑功能操作菜单 382
15.2.1 修改菜单资源 383
15.2.2 建立操作菜单消息处理函数 383
15.3 建立编辑数据记录的对话框类 385
15.3.1 建立对话框资源 385
15.3.2 创建编辑数据记录的对话框类 386
15.3.3 设置对话框类的外部对象引用 387
15.3.4 建立对话框控制与记录集合类的映射变量的映射联系 389
15.4 增加和修改数据记录 391
15.4.1 获得记录的唯一识别号 391
15.4.2 增加记录 393
15.4.3 修改记录 396
15.5 删除记录 398
15.5.1 删除当前记录 398
15.5.2 删除所有记录 398
第16章 通用数据库过滤功能 400
16.1 过滤操作的实现方式 400
16.1.1 固定条件过滤操作 400
16.1.2 固定方式过滤操作 400
16.1.3 通用条件过滤操作 401
16.2 创建组织过滤条件的对话框类 402
16.2.1 创建对话框资源 402
16.2.2 创建组织过滤条件的对话框类 404
16.3 组织过滤条件编辑器的各种功能 405
16.3.1 过滤条件编辑器编辑的过滤条件式的语法格式 405
16.3.2 定义和初始化对话框类的变量 407
16.3.3 产生和分解各级条件子式 409
16.3.4 初始化对话框的状态 414
16.3.5 增加条件子式 416
16.3.6 删除和修改条件子式 421
16.3.7 条件子式的分解功能 425
16.3.8 实现过滤操作 428
16.4 在数据库浏览视图中实现过滤功能 430
16.4.1 增加一个操作菜单 430
16.4.2 实现数据库过滤操作功能 431
16.5 增强过滤条件编辑器的功能 432
16.5.1 增强过滤条件分解能力 432
16.5.2 增强交互式编辑界面 433
16.5.3 存储过滤条件 434
第17章 通用数据库排序功能 435
17.1 排序操作的方式 435
17.2 通用排序子式编辑器的实现 436
17.2.1 创建一个对话框类 436
17.2.2 定义和初始化对话框类的成员变量 439
17.2.3 产生和分解排序子式 442
17.2.4 增加、插入、修改、删除排序字段 445
17.2.5 进行排序 452
17.3 实现数据库排序功能 453
第18章 数据库管理功能通用化 454
18.1 各种数据库管理功能的可通用化分析 454
18.1.1 可通用化的数据库管理功能 454
18.1.2 不易通用化的功能 455
18.2 实现数据库管理功能通用化 456
18.2.1 通用化功能模块的方法 456
18.2.2 功能模块通用化的步骤 458
18.2.3 选择操作不同的记录集合对象 463
18.2.4 增加应用程序管理的记录集合对象 465
18.2.5 增加通用数据库操作功能 469
18.3 数据库管理功能完全通用化 471
第四篇 基本GIS系统 475
第19章 矢量图形系统与数据库管理系统的连接 475
19.1 连接方式及连接单元 475
19.1.1 连接方式 475
19.1.2 连接单元 476
19.1.3 连接的特性 476
19.2 唯一标识连接单元 477
19.2.1 标识图形连接单元 477
19.2.2 标识数据连接单元 478
19.3 管理连接信息的方法 479
19.3.1 连接的参数表示 479
19.3.2 存储组织连接信息的方法 480
第20章 在应用程序Draw中实现连接功能 484
20.1 建立管理连接信息的记录集合对象 484
20.1.1 新建记录集合类 484
20.1.2 创建管理连接信息的记录集合对象 487
20.2 组织进行连接操作的对话框类 488
20.2.1 连接操作的具体步骤 488
20.2.2 创建对话框类 488
20.2.3 初始化对话框类 492
20.2.4 实现对话框类的数据交换机制 496
20.2.5 实现对话框类的各操作功能 496
20.3 实现矢量图形系统和数据库管理系统的连接 503
20.3.1 实现连接功能 503
20.3.2 完善连接功能 506
20.4 实现实体 507
20.4.1 实体的概念 507
20.4.2 实体的数据结构 507
20.4.3 有关实体的操作 509
第21章 实现双向信息查询 512
21.1 建立显示和编辑数据信息的对话框类 512
21.2 实现对话框类的操作功能 515
21.2.1 对话框类的初始化 515
21.2.2 编辑性质数据 518
21.2.3 删除与数据连接单元的连接 520
21.3 实现信息查询功能 521
第22章 图形元素的空间拓扑关系 525
22.1 直线与多边形区域的关系 525
22.1.1 直线与直线的关系 525
22.1.2 直线与多边形区域的相交关系 530
22.1.3 连续直线与多边形区域的相交关系 535
22.2 圆弧与多边形区域的关系 537
22.2.1 圆与直线的关系 538
22.2.2 圆弧与直线的关系 542
22.2.3 圆弧与多边形区域的关系 544
22.3 图形元素与圆形区域的关系 548
22.3.1 圆与圆的关系 549
22.3.2 圆弧与圆形区域的关系 551
22.3.3 直线与圆形区域的关系 554
第23章 GIS系统空间信息统计和分析功能 556
23.1 空间信息统计和分析的实现步骤 556
23.2 区域信息统计和分析 557
23.2.1 区域选择图形元素的方法 557
23.2.2 区域信息统计和分析 559
23.3 线类相交信息统计和分析 560
23.3.1 线类相交选择图形元素的方法 560
23.3.2 线类相交区域计算 561
23.3.3 线类相交信息统计和分析 561
23.4 实用GIS系统开发 562
第五篇 多用户GIS系统 567
第24章 开发分布式多用户数据库管理系统 567
24.1 Visual C++开发分布式多用户数据库管理系统 567
24.1.1 服务器/客户机应用程序设计 567
24.1.2 Visual C++开发基于服务器/客户机体系的数据库管理系统 567
24.2 分布式多用户数据库管理系统开发技术 568
24.2.1 定期更新记录集合对象 568
24.2.2 多用户应用程序中对记录的修改策略 570
第25章 实现多用户GIS系统 574
25.1 部分多用户化GIS系统 574
25.1.1 部分多用户化GIS系统 574
25.1.2 实现数据库管理系统的多用户化 574
25.1.3 实现连接信息管理多用户化 575
25.2 完全多用户化GIS系统 575
25.2.1 矢量图形元素的数据库记录化 575
25.3.2 转换数据表的内容为图形元素 577
附录 本书所附光盘内容及技术支持 578
参考书目 579