第1篇 Visual C++程序开发基础 3
第1章 Visual C++与面向对象技术概述 3
1.1 面向对象技术 3
1.1.1 面向对象的基本概念 3
1.1.2 面向对象技术的基本特征 5
1.1.3 面向对象设计语言与Visual C++ 5
1.2 C++的面向对象特性 7
1.2.1 C++中的类与对象 7
1.2.2 C++类的继承与派生 9
1.2.3 类的继承实例 11
1.2.4 虚函数与多态 13
1.2.5 虚函数实现运行时多态实例 15
1.2.6 动态联编与虚函数表 17
1.3 C++的一些重要要素 18
1.3.1 类的静态成员 18
1.3.2 const常量 19
1.3.3 this指针 20
1.3.4 inline内联函数 20
1.3.5 &操作符引用类型 21
1.3.6 友元 22
1.3.7 操作符重载 22
1.3.8 模板 25
第2章 Visual C++6.0概述 30
2.1 Visual C++6.0及其开发环境 30
2.2 Visual C++6.0的菜单栏 31
2.2.1 “File”菜单 32
2.2.2 “Edit”菜单 35
2.2.3 “View”菜单 38
2.2.4 “Insert”菜单 40
2.2.5 “Project”菜单 41
2.2.6 “Build”菜单 42
2.2.7 “Debug”菜单 44
2.2.8 “Tools”菜单 45
2.3 Visual C++6.0的资源及资源编辑器 47
2.3.1 资源编辑器 47
2.3.2 资源符号 48
2.3.3 对话框编辑器 49
2.3.4 加速键表及其编辑器 50
2.3.5 串表及其编辑器 51
2.3.6 版本信息编辑器 52
2.3.7 图形编辑器 52
第3章 应用程序框架 54
3.1 Windows编程基础 54
3.1.1 Windows API编程基础 54
3.1.2 窗口 54
3.1.3 事件驱动 55
3.1.4 句柄 56
3.1.5 消息 56
3.1.6 Windows应用程序的常用消息 57
3.2 Windows应用程序的组成及编程 58
3.2.1 典型的Windows程序结构 58
3.2.2 入口函数WinMain() 58
3.2.3 窗口函数WinProc() 61
3.2.4 常用的数据类型 62
3.2.5 API编程实例 63
3.3 MFC基础 66
3.3.1 MFC简介 67
3.3.2 MFC类库 67
3.3.3 应用程序体系结构类 68
3.4 MFC应用程序开发 69
3.4.1 简单的MFC程序分析 69
3.4.2 MFC对象和Windows对象 71
3.4.3 MFC的命名规则 72
3.4.4 MFC的全局函数与宏 73
3.4.5 MFC应用程序的创建 74
3.4.6 MFC程序执行过程 74
3.5 MFC消息映射及消息处理 75
3.5.1 消息映射宏 76
3.5.2 MFC消息的分类及消息映射 76
3.5.3 消息处理 78
第2篇 Visual C++基本程序开发要素第4章 基本输入处理 81
4.1 C++中的I/O流处理 81
4.1.1 iostream流类库 81
4.1.2 非格式化输入/输出 82
4.1.3 非格式化输入/输出实例 83
4.1.4 格式化输入/输出 85
4.1.5 格式化输入/输出实例 87
4.2 键盘和键盘消息处理 89
4.2.1 键盘消息 89
4.2.2 按键消息及其处理 90
4.2.3 字符消息及其处理 91
4.2.4 键盘输入的其他相关编程技术 92
4.2.5 键盘处理编程实例 92
4.3 鼠标消息及其处理 96
4.3.1 客户区鼠标消息 97
4.3.2 非客户区鼠标消息 98
4.3.3 鼠标捕捉 99
4.3.4 鼠标光标及其处理 100
4.3.5 常用的鼠标操作API函数 102
4.3.6 鼠标处理编程实例 106
第5章 菜单、工具栏、状态栏及其相关资源 110
5.1 菜单的使用 110
5.1.1 菜单消息 111
5.1.2 使用菜单编辑器生成下拉菜单 112
5.1.3 简单的下拉菜单创建及使用实例 113
5.1.4 动态操作菜单 117
5.1.5 动态操作菜单实例 119
5.1.6 弹出式菜单编程 122
5.1.7 弹出式菜单编程实例 123
5.1.8 菜单项中使用图标 125
5.1.9 快捷键 126
5.2 工具栏的使用 129
5.2.1 控件栏与CControlBar类 129
5.2.2 工具栏及工具栏类CToolBar 131
5.2.3 工具栏的简单实例 131
5.2.4 工具栏的创建过程 135
5.2.5 工具提示 137
5.2.6 工具栏的高级应用 138
5.3 状态栏的使用 143
5.3.1 状态栏类CStatusBar 143
5.3.2 状态栏的简单应用 144
5.3.3 状态栏的创建 145
5.3.4 状态栏的创建实例 147
第6章 设备描述表和图形对象 151
6.1 设备描述表的相关概念 151
6.1.1 图形设备接口与设备描述表 151
6.1.2 设备描述表的类型 152
6.1.3 图形对象 152
6.2 MFC设备描述表基类CDC 153
6.2.1 CDC类简介 153
6.2.2 CDC类常用函数 153
6.2.3 CDC类应用实例 156
6.3 CDC类的派生类 158
6.3.1 CPaintDC类 158
6.3.2 CClientDC类 160
6.3.3 CWindowDC类 161
6.4 坐标系统与映射方式 163
6.4.1 GDI坐标系统 163
6.4.2 映射方式 163
6.4.3 坐标映射实例 165
6.5 画笔、画刷和字体 166
6.5.1 画笔(CPen) 166
6.5.2 画刷(CBrush) 167
6.5.3 字体(CFont) 168
6.5.4 应用实际 170
6.6 位图与调色板 172
6.6.1 设备相关位图(DDB) 172
6.6.2 CBitmap应用实例 174
6.6.3 设备无关位图(DIB) 176
6.6.4 调色板(CPalette) 177
6.6.5 CPalette应用实例 179
6.7 区域 182
6.7.1 区域的选择和建立 182
6.7.2 区域的操作 182
6.7.3 类CRgn 184
6.7.4 区域操作实例 185
第7章 Windows通用控件 187
7.1 Windows通用控件及其相关操作 187
7.1.1 Windows通用控件及其相关类 187
7.1.2 控件的创建方法 189
7.1.3 通用控件的常用操作 190
7.1.4 控件的消息及其处理 191
7.2 按钮控件 194
7.2.1 基本概念 194
7.2.2 MFC对按钮控件的支持 194
7.2.3 使用ClassWizard添加成员变量和消息映射 197
7.2.4 动态创建、设置按钮属性 198
7.2.5 与按钮控件有关的CWnd成员函数 200
7.2.6 单选按钮的相关操作 201
7.2.7 按钮控件使用实例 202
7.3 编辑控件、列表框和组合框 207
7.3.1 编辑控件基本概念 207
7.3.2 MFC对编辑控件的支持 208
7.3.3 对话框数据验证(DDV) 212
7.3.4 编辑控件应用实例 214
7.3.5 列表框的基本概念 216
7.3.6 MFC对列表框的支持 217
7.3.7 列表框的常用操作及派生类 220
7.3.8 组合框的基本概念 221
7.3.9 MFC对组合框的支持 222
7.3.10 组合框的常用操作及派生类 225
7.3.11 列表框、组合框应用实例 226
7.4 微调控件、滑块控件、滚动条和进度条 230
7.4.1 微调控件的基本概念 230
7.4.2 MFC对微调控件的支持 231
7.4.3 微调控件的常用操作 233
7.4.4 滑块控件的基本概念 235
7.4.5 MFC对滑块控件的支持 236
7.4.6 滑动控件的常用操作 238
7.4.7 滚动条控件的基本概念 239
7.4.8 MFC对滚动条控件的支持 240
7.4.9 进度条控件的基本概念 242
7.4.10 MFC对进度条控件的支持 242
7.4.11 应用实例 243
7.5 列表视图控件和树形视图控件 249
7.5.1 列表视图控件的基本概念 250
7.5.2 MFC对列表视图控件的支持 251
7.5.3 列表视图控件的常用操作 255
7.5.4 树形视图控件的基本概念 257
7.5.5 MFC对树形视图控件的支持 259
7.5.6 树形视图控件的常用操作 262
7.5.7 列表视图控件和树形视图控件的应用实例 263
7.6 其他一些控件的简单介绍 268
7.6.1 IP地址控件 268
7.6.2 月历控件 269
7.6.3 时间、日期提取控件 271
第8章 MFC通用类 275
8.1 字符串类(CString) 275
8.1.1 CString与UNICODE 275
8.1.2 CString对象的内存分配 277
8.1.3 CString对象的创建 277
8.1.4 CString类的主要成员函数 278
8.1.5 CString常用的操作 279
8.1.6 CString类型转换 283
8.2 数组类(CArray) 285
8.2.1 数组类简介 285
8.2.2 数组类的成员函数 286
8.2.3 CArray数组模板类的使用实例 287
8.3 链表类(CList) 291
8.3.1 链表类简介 291
8.3.2 链表类的成员函数 292
8.3.3 链表类的常用操作 293
8.3.4 链表类的应用实例 294
8.4 日期、时间类 299
8.4.1 CTime类及其成员函数 299
8.4.2 CTime类常用操作 300
8.4.3 CTimeSpan类 302
8.4.4 CTimeSpan类的使用 303
8.4.5 COleDataTime和COleDataTimeSpan类 304
8.4.6 WM_TIMER消息与定时器 304
8.4.7 简单定时器实例 306
第3篇 Visual C++基本应用程序开发第9章 对话框编程 311
9.1 对话框的基本概念与操作 311
9.1.1 模态与非模态对话框 311
9.1.2 策划话框类CDialog 312
9.1.3 设计对话框模板并与对话框类连接 313
9.2 对话框的创建 316
9.2.1 创建模态对话框 316
9.2.2 模态对话框创建实例 316
9.2.3 创建非模态对话框 318
9.2.4 非模态对话框创建实例 320
9.2.5 模态对话框与非模态对话框的区别 322
9.3 对话框消息与常用函数 322
9.3.1 对话框消息处理 322
9.3.2 控件与控件类的连接 324
9.3.3 对话框中常用函数的执行顺序 325
9.4 对话框数据交换与验证 326
9.4.1 绑定数据成员与控件 326
9.4.2 数据交换及交换方向的确定 327
9.4.3 数据验证 328
9.4.4 对话框使用实例 329
9.5 基于对话框的应用程序 332
9.5.1 AppWizard创建基于对话框的应用程序框架 332
9.5.2 基于对话框的应用程序框架结构 335
第10章 常用对话框 337
10.1 消息对话框 337
10.1.1 MessageBox对话框 337
10.1.2 AfxMessageBox对话框 340
10.2 通用对话框 340
10.2.1 通用对话框的支持类 341
10.2.2 颜色对话框 342
10.2.3 字体对话框 344
10.2.4 颜色、字体对话框使用实例 346
10.2.5 文件对话框 349
10.2.6 查找、替换对话框 351
10.2.7 打印对话框 355
10.2.8 页面设置对话框 356
10.3 属性表对话框 358
10.3.1 标签控件 358
10.3.2 使用标签控件实现属性表对话框实例 361
10.3.3 属性表和属性页 367
10.3.4 属性表的创建 369
10.3.5 属性表的按钮处理 369
10.3.6 属性表编程实例 370
10.4 应用向导对话框 374
10.4.1 常用的应用向导函数 375
10.4.2 应用向导开发 375
第11章 基于文档/视图的程序开发 378
11.1 文档/视图结构 378
11.1.1 文档/视图结构简介 378
11.1.2 MFC文档/视图结构相关的类 379
11.2 单文档应用程序框架的建立与分析 380
11.2.1 利用AppWizard建立单文档应用程序框架 380
11.2.2 单文档应用程序框架所使用的类 382
11.2.3 单文档应用程序框架的简单实现过程 383
11.2.4 单文档应用程序框架的资源 384
11.3 文档/视图结构开发基础 385
11.3.1 CDocument类及其常用函数 385
11.3.2 CView类及其常用函数 386
11.3.3 文档的读写操作 387
11.3.4 文档/视图结构的应用程序执行流程 389
11.3.5 文档/视图的初始化和清除 391
11.4 文档/视图结构开发实例 392
11.4.1 实例说明 392
11.4.2 视图的处理 392
11.4.3 文档的处理 395
11.4.4 文档数据的序列化 399
11.4.5 视图窗口的滚动处理 401
11.5 多视的实现——窗口分割 403
11.5.1 窗口分割的基本概念 403
11.5.2 窗口分割的支持类CSplitterWnd 404
11.5.3 动态分割窗口的实例 406
11.6 静态分割窗口与多视图的实例 407
11.6.1 实例说明 408
11.6.2 创建工程 408
11.6.3 添加视图类 408
11.6.4 静态分割窗口的实现 410
11.6.5 窗格视图与文档的交互 412
11.7 多文档应用程序开发 414
11.7.1 多文档的应用程序的特点 414
11.7.2 多文档应用程序框架的创建及分析 415
11.7.3 多文档应用程序各类的关系 417
11.7.4 多文档应用程序开发实例 419
第12章 文件操作 421
12.1 C++中文件的I/O操作 421
12.1.1 文件的I/O类及其使用 421
12.1.2 C++的文件流进行文件管理实例 423
12.2 Win32 API函数进行文件操作 425
12.2.1 打开与关闭文件 425
12.2.2 文件的读写 427
12.2.3 文件指针位置设置及获取文件大小 429
12.2.4 文件的异步读写 430
12.2.5 文件的复制、删除、移动和重命名 431
12.2.6 文件的查找与遍历 432
12.2.7 文件遍历实例 433
12.2.8 获取驱动器的信息 435
12.2.9 目录操作 437
12.3 MFC文件操作类——CFile 438
12.3.1 CFile类简介 438
12.3.2 CFile对象的构造类函数 439
12.3.3 输入输出方法 440
12.3.4 文件定位函数 441
12.3.5 CFile类的其他常用函数 441
12.3.6 使用CFile类进行文件操作实例 443
12.4 CFile的派生类与CFileFind类 446
12.4.1 CStdioFile类 446
12.4.2 CMemFile类 447
12.4.3 CSharedFile类 448
12.4.4 CFileFind类 448
第13章 打印与帮助 450
13.1 文档/视图结构的打印与打印预览 450
13.1.1 文档/视图结构自动实现的打印与打印预览 450
13.1.2 CPrintlnfo结构 452
13.1.3 打印操作 453
13.1.4 打印预览 455
13.1.5 打印比例 456
13.1.6 打印实例——“所见即所得”打印 456
13.2 WinHelp帮助 457
13.2.1 应用程序框架与WinHelp 457
13.2.2 WinHelp帮助文件的制作 459
13.2.3 应用程序框架中WinHelp的使用过程 462
13.2.4 WinHelp帮助的添加 465
13.3 HtmlHelp帮助 467
第14章 内存管理、调试与异常 470
14.1 Win32的内存管理 470
14.1.1 内存分配 470
14.1.2 堆内存的管理 471
14.1.3 虚拟内存的管理 474
14.1.4 C++中的简单内存分配 477
14.2 内存泄漏 478
14.3 Visual C++程序的调试技术 478
14.3.1 配置调试环境 478
14.3.2 设置调试断点 479
14.3.3 断点的取消 482
14.3.4 控制程序的运行 482
14.3.5 查看工具 483
14.3.6 高级调试技术 485
14.4 Visual C++异常处理 488
14.4.1 C++的异常处理 488
14.4.2 MFC异常类 489
14.4.3 MFC异常的使用 491
第4篇 Visual C++高级开发技术 495
第15章 动态链接库编程 495
15.1 DLL基础 495
15.1.1 动态链接库与静态链接库 495
15.1.2 DLL的工作原理 496
15.1.3 DLL的特点 497
15.1.4 Visual C++中DLL的分类 498
15.1.5 导入/导出的概念 498
15.2 非MFC动态库 499
15.2.1 Win32 DLL的创建 499
15.2.2 导出函数 500
15.2.3 DLL的调用实例(显式链接) 501
15.2.4 DLL的调用方式 503
15.2.5 隐式链接DLL实例 504
15.2.6 DLL程序调试 506
15.3 DLL的其他相关知识 507
15.3.1 DIIMain函数 507
15.3.2 函数调用的约定 508
15.3.3 导出变量DLL的开发 508
15.3.4 导出变量DLL的调用 510
15.3.5 导出类的DLL开发实例 512
15.3.6 导出类的DLL调用 515
15.4 MFC规则DLL 518
15.4.1 MFC规则DLL的基本概念 518
15.4.2 MFC规则DLL创建实例 518
15.4.3 MFC规则DLL的调用实例 521
15.5 MFC扩展DLL 523
15.5.1 MFC扩展DLL概述 523
15.5.2 MFC扩展DLL的创建实例 524
15.5.3 MFC扩展DLL的调用实例 528
15.6 钩子(HOOK)技术 531
15.6.1 钩子的基本原理 532
15.6.2 钩子的编写过程 533
15.6.3 全局钩子DLL创建实例 535
15.6.4 全局钩子DLL调用实例 539
第16章 注册表编程 541
16.1 注册表的基本概念 541
16.1.1 注册表文件构成 541
16.1.2 注册表的结构 542
16.1.3 注册表的作用 543
16.2 常用的注册表键 544
16.2.1 HKEY_LOCAL_MACHINE根键 544
16.2.2 HKEY_CURRENT_USERS根键 545
16.2.3 HKEY_CLASS_ROOT根键 545
16.2.4 HKEY_USERS根键 545
16.2.5 HKEY_CURRENT_CONFIG根键 546
16.3 简单的注册表操作实例 546
16.3.1 实例说明 546
16.3.2 开发过程 546
16.3.3 程序要点 548
16.4 注册表函数 550
16.4.1 打开/关闭注册表键 551
16.4.2 获取、设置、删除注册表中的键值 552
16.4.3 创建/删除键 554
16.4.4 枚举每一个子键 556
16.4.5 注册表函数综合应用实例 557
16.5 注册表类CRegKey 561
16.5.1 打开/关闭注册表键成员函数 562
16.5.2 注册表键值的操作成员函数 562
16.6 创建自己的注册表类 564
16.6.1 CRegistry类的声明 565
16.6.2 CRegistry类的实现 566
16.7 CWinApp类实现的注册表操作 570
16.7.1 SetRegistryKey函数 571
16.7.2 CWinApp类中读写注册表信息函数 571
16.7.3 CWinApp类读写注册表信息实例 572
第17章 多线程程序设计 579
17.1 Windows多任务的概念 579
17.1.1 进程 579
17.1.2 线程 579
17.1.3 用Spy++工具观察进程和线程 580
17.2 简单的多线程实例 581
17.2.1 实例说明 581
17.2.2 实例创建过程 581
17.2.3 要点说明 589
17.3 Win32API线程处理 590
17.3.1 线程的创建和终止函数 590
17.3.2 线程的终止条件 592
17.3.3 线程的优先级 593
17.3.4 线程优先级操作 594
17.3.5 线程的调度 594
17.4 MFC线程处理 595
17.4.1 MFC线程简介 595
17.4.2 用户界面线程的创建 596
17.4.3 用户界面线程创建实例 598
17.4.4 工作线程的创建 602
17.4.5 工作线程的创建实例 602
17.5 线程间的通信 605
17.5.1 使用全局结构实现线程间的通信 605
17.5.2 使用自定义的消息实现线程间的通信 606
17.5.3 线程间通信的实例 607
17.6 线程的同步 609
17.6.1 线程同步的概念 609
17.6.2 CEvent类实现线程同步 609
17.6.3 等待函数 611
17.6.4 CEvent类线程同步实例 612
17.6.5 CCriticalSection类实现线程同步 614
17.6.6 CMutex类实现线程同步 615
17.6.7 CSemaphore类实现线程同步 615
17.6.8 CSemaphore类线程同步实例 616
17.7 多线程编程综合实例 618
17.7.1 实例说明 618
17.7.2 实例创建过程 619
17.7.3 实例开发要点 624
第18章 ActiveX控件的使用与开发 626
18.1 ActiveX控件概述 626
18.1.1 ActiveX控件简介 626
18.1.2 ActiveX控件的结构 626
18.1.3 ActiveX控件的特点 628
18.2 MFC中ActiveX控件的使用 628
18.2.1 Visual C++中的组件和控件库 628
18.2.2 MFC中ActiveX控件的使用方法 629
18.3 对话框应用程序中使用ActiveX控件实例 630
18.3.1 实例说明 630
18.3.2 实例开发过程 631
18.3.3 程序要点分析 637
18.4 非对话框应用程序中ActiveX控件的使用 637
18.4.1 ActiveX控件的动态创建 637
18.4.2 实例说明 638
18.4.3 实例开发过程 638
18.5 ActiveX控件的开发 641
18.5.1 ActiveX控件的基本要求 642
18.5.2 MFC对ActiveX控件的支持 642
18.5.3 使用MFC开发ActiveX控件实例 645
18.5.4 测试ActiveX控件 650
18.5.5 ATL简介 652
18.5.6 使用ATL开发ActiveX控件实例 653
第5篇 Visual C++专项应用开发技术第19章 数据库及SQL基础 661
19.1 数据库概述 661
19.1.1 数据库系统的基本概念 661
19.1.2 数据模式 662
19.2 关系型数据库系统 663
19.2.1 关系模型简介 664
19.2.2 关系数据结构 664
19.2.3 关系模型的完整性约束 666
19.3 关系型数据库设计 667
19.3.1 设计流程 667
19.3.2 E-R数据模型和E-R图 668
19.4 SQL概述 670
19.4.1 SQL语言的特点 670
19.4.2 基本概念和数据类型 671
19.4.3 SQL语言的分类 672
19.5 数据定义语言(DDL) 673
19.5.1 新建、删除与修改表 673
19.5.2 新建和取消视图 674
19.5.3 新建和删除索引 675
19.6 简单的SQL查询语言 675
19.6.1 SELECT子句和FROM子句 676
19.6.2 WHERE子句定义查询条件 677
19.6.3 GROUP BY子句对查询结果分组 679
19.6.4 ORDER BY子句对查询结果分组 679
19.7 深入SQL查询语言 680
19.7.1 集合查询 680
19.7.2 连接查询 680
19.7.3 嵌套查询 682
19.8 SQL中的视图 684
19.8.1 定义和删除视图 684
19.8.2 查询视图 685
19.9 数据操纵语言(DML) 686
19.9.1 INSERT语句 686
19.9.2 DELETE语句 687
19.9.3 UPDATE语句 688
19.9.4 视图的更新 689
19.10 数据控制语言(DCL) 689
19.10.1 数据库安全 690
19.10.2 访问控制 690
19.10.3 授权操作和收回权限操作 691
19.10.4 事务控制和并发控制简介 692
第20章 ADO数据库编程 694
20.1 概述 694
20.1.1 数据库编程概述 694
20.1.2 ODBC API 694
20.1.3 MFC ODBC 695
20.1.4 DAO 695
20.2 ADO技术 696
20.2.1 COM技术简介 696
20.2.2 ADO与OLEDB 696
20.2.3 ADO的对象模型简介 698
20.2.4 ADO编程概述 700
20.3 开发实例——前期准备 703
20.3.1 设计和创建数据库 704
20.3.2 构建程序框架 705
20.3.3 引入ADO动态链接库 709
20.3.4 初始化COM库环境 710
20.4 开发实例——创建ADO与数据库的连接 710
20.4.1 使用Connection对象打开连接 711
20.4.2 例程中实现数据库连接 712
20.5 开发实例——使用记录集对象查询数据库 713
20.5.1 记录集对象的属性和方法 714
20.5.2 主对话框List控件的初始化 716
20.5.3 QueryDVDName函数的实现 718
20.5.4 主对话框中ComboBox控件初始化 719
20.5.5 查询功能的实现 720
20.5.6 “出租”对话框List控件的初始化 724
20.6 开发实例:操作记录 726
20.6.1 使用记录集对象添加记录 726
20.6.2 使用Command对象添加记录 728
20.6.3 使用记录集对象修改记录 730
20.6.4 删除记录 732
20.7 开发实例——事务处理 733
20.8 开发实例:调用存储过程 735
第21章 水晶报表Crystal Reports 739
21.1 使用前的准备 739
21.1.1 简介 739
21.1.2 安装水晶报表 739
21.1.3 水晶报表编程概述 740
21.2 制作简单报表 741
21.2.1 软件界面简介 741
21.2.2 新建报表 742
21.2.3 选择要使用的数据库 743
21.2.4 插入字段 745
21.2.5 插入多个字段 747
21.2.6 使用“文本对象”组合数据库字段 747
21.2.7 添加摘要信息 749
21.2.8 添加报表标题 749
21.2.9 设置对象格式 749
21.2.10 添加字段标题 751
21.3 记录选定、分组和排序 751
21.3.1 记录选定简介 752
21.3.2 使用“选择专家”进行记录选定 752
21.3.3 使用“选择公式”选定记录 754
21.3.4 修正大写/小写不一致 758
21.3.5 使用多个选择条件 758
21.3.6 记录排序和分组 760
21.3.7 组选定 765
21.4 子报表 766
21.4.1 什么是子报表 766
21.4.2 未链接的子报表与链接的子报表 766
21.4.3 插入子报表 767
21.4.4 更改子报表为主报表 770
21.4.5 创建按需显示子报表 770
21.4.6 更新子报表 773
21.5 在Visual C++中使用水晶报表控件 774
21.5.1 Crystal Reports提供的控件 774
21.5.2 在Visual C++6.0中使用水晶报表概述 775
21.5.3 pubs数据库报表查看程序 776
第22章 Winsock网络编程 787
22.1 网络通信基础 787
22.1.1 网络的结构 787
22.1.2 网络的分层 788
22.1.3 TCP/IP协议 789
22.2 WinSock概述 790
22.2.1 Windows Sockets基础 790
22.2.2 Windows Sockets通信机制 791
22.2.3 Windows Sockets网络编程原理 791
22.3 一个简单的网络程序 792
22.3.1 实例说明 793
22.3.2 服务器程序的实现 793
22.3.3 客户端程序的实现 796
22.4 WinSock API函数 799
22.4.1 WinSock API函数概述 799
22.4.2 初始化——WSAStartup() 801
22.4.3 创建套接字——socket() 802
22.4.4 绑定套接字地址与端口——bind() 802
22.4.5 在服务器上监听——Iisten()、accept() 803
22.4.6 从客户机上建立连接——connect() 804
22.4.7 利用流套接字进行数据交换——send()、recv() 804
22.4.8 利用数据报套接字进行数据交换——sendto()、recvfrom() 805
22.5 MFCWinSock编程 806
22.5.1 MFC WinSock类 807
22.5.2 WinSock初始化 808
22.5.3 Socket的创建、连接与关闭 809
22.5.4 数据的发送与接收 811
22.5.5 Socket事件处理 812
22.5.6 Socket的其他相关操作 813
22.5.7 CSocket类对象的阻塞模式 815
22.5.8 CSocket类对象的非阻塞模式 816
22.6 MFC WinSock网络编程实例 817
22.6.1 实例说明 817
22.6.2 服务器端程序创建 818
22.6.3 客户端程序创建 822
第23章 Internet编程 827
23.1 Winlnet概述 827
23.1.1 WinlnetAPI函数 827
23.1.2 MFC Winlnet类 829
23.2 Winlnet开发Internet客户端程序 830
23.2.1 Winlnet开发要点 830
23.2.2 Winlnet的开发流程 833
23.2.3 使用Winlnet访问HTTP服务器 833
23.2.4 使用Winlnet访问FTP服务器 834
23.2.5 MFC Winlnet类编程实例 835
23.3 ISAPI服务器扩展 838
23.3.1 ISAPI概述 838
23.3.2 ISAPI与CGI 839
23.3.3 MFC提供的ISAPI类 839
23.3.4 使用MFC开发ISA程序 840
23.3.5 MFC开发ISAPI扩展程序实例 842
23.4 动态HTML 847
23.4.1 动态HTML的基本概念 847
23.4.2 Win32 WebBrowser ActiveX控件 848
23.4.3 使用WebBrowser控件开发Web浏览器实例 850
23.4.4 CHtmIView类 853
23.4.5 CHtmIView类应用实例——一个简单的浏览器 854
第24章 Visual C++数字图像处理基础 858
24.1 数字图像基础 858
24.1.1 图像及其分类 858
24.1.2 调色板 859
24.1.3 色彩系统 859
24.1.4 常用的图像格式 861
24.2 设备无关位图 862
24.2.1 常用的DIB函数 863
24.2.2 构造自己的DIB类 864
24.3 BMP文件的操作 873
24.3.1 BMP文件的格式 873
24.3.2 BMP文件读取、显示与存储 876
24.4 数字图像处理 881
24.4.1 数字图像处理的主要内容 882
24.4.2 数字图像处理的应用 883
24.4.3 数字图像处理的发展动向 884
24.5 Visual C++搭建数字图像处理平台 884
24.5.1 平台介绍 885
24.5.2 创建工程 886
24.5.3 标尺的实现 886
24.5.4 图像的读取与显示 892
24.5.5 图像处理——图像缩放 895
第25章 Visual C++音/视频处理 900
25.1 多媒体编程的基础知识 900
25.1.1 数字音频 900
25.1.2 数字图像 902
25.1.3 视频处理技术 902
25.2 简单的视频控件、音频处理函数 903
25.2.1 动画控件 903
25.2.2 动画控件的使用实例 905
25.2.3 Visual C++中音频播放的方法 906
25.2.4 使用低级波形音频函数播放音频文件实例 911
25.3 MCI基础知识 915
25.3.1 MCI简介 916
25.3.2 MCI设备类型 916
25.3.3 MCI接口 917
25.3.4 MCI命令接口函数 918
25.3.5 MCI命令消息 919
25.4 MCI音/视频编程 920
25.4.1 定制基于MCI的WAV音频处理类 920
25.4.2 基于MCI的波形音频编程实例 926
25.4.3 定制基于MCI的AVI视频处理类 931
25.4.4 基于MCI的AVI视频编程实例 934
25.5 视频捕捉 938
25.5.1 VFW简介 939
25.5.2 视频捕捉窗口的操作 940
25.5.3 视频捕捉的回调函数 941
25.5.4 视频预览与采集 943
25.5.5 视频设置对话框 944
25.5.6 视频压缩与传输 944
25.6 综合实例——点对点音/视频、文字传输 944
25.6.1 系统说明 945
25.6.2 程序的类和资源 946
25.6.3 程序的工作流程 953