第1章 Visual C++ 6.0使用入门 1
1.1 Visual C++ 6.0概述 1
1.2 Visual C++ 6.0集成开发环境 1
1.2.1 窗口组成 2
1.2.2 自定义工具栏 4
1.2.3 自定义快捷键 5
1.3 Visual C++ 6.0编程基本操作 7
1.3.1 创建工程文件 7
1.3.2 编辑程序 9
1.3.3 编译程序 10
1.3.4 链接程序 10
1.3.5 运行程序 11
1.3.6 保存工程 11
1.3.7 打开工程 11
1.3.8 添加文件 12
第2章 C++面向过程的编程知识 15
2.1 C++程序结构 15
2.2 变量和常量 17
2.2.1 标识符和关键字 17
2.2.2 基本数据类型 18
2.2.3 变量 19
2.2.4 常量 19
2.3 运算符和表达式 20
2.3.1 运算符 20
2.3.2 运算符的优先级 22
2.3.3 数据类型转换 24
2.4 C++基本语句 25
2.4.1 空语句和块语句 25
2.4.2 if语句 25
2.4.3 switch语句 28
2.4.4 for语句 29
2.4.5 while语句 30
2.4.6 do…while语句 31
2.4.7 break和continue语句 32
2.4.8 预处理指令 34
2.5 复杂的数据类型 36
2.5.1 数组 36
2.5.2 结构 37
2.5.3 联合 37
2.5.4 枚举 38
2.5.5 指针 38
2.5.6 字符串 39
2.6 函数 39
2.6.1 C++标准库 40
2.6.2 自定义函数 54
2.6.3 函数调用 56
2.6.4 函数的递归 58
第3章 Visual C++面向对象编程知识 60
3.1 面向对象编程技术 60
3.2 类和对象 61
3.2.1 类 61
3.2.2 对象 64
3.3 函数和运算符的重载 66
3.3.1 函数重载 67
3.3.2 运算符重载 68
3.4 继承 71
3.4.1 单一继承 71
3.4.2 多重继承 75
3.5 虚函数 79
第4章 应用程序的调试 83
4.1 应用程序的错误类型 83
4.2 调试程序应该具备的性能 84
4.3 Visual Studio集成调试程序 84
4.3.1 调试前的准备 84
4.3.2 在运行时使用调试程序 86
4.3.3 调试窗口 87
4.3.4 使用断点和单步调试功能 89
4.3.5 使用DataTips信息以及QuickWatch窗口 92
4.3.6 在调试过程中使用Threads和Exceptions对话框 92
4.4 简单调试技巧 93
4.4.1 使用消息框提高调试速度 93
4.4.2 调试输出 94
4.4.3 使用断言 94
4.4.4 对象转储 95
4.4.5 检测内存泄漏与CMemoryState类 95
4.4.6 使用MFC跟踪 96
4.5 远程调试 96
4.6 编辑并继续调试 97
第5章 MFC编程基础及异常处理 99
5.1 MFC概述 99
5.1.1 MFC特点 99
5.1.2 MFC的设计原理 100
5.1.3 MFC的优势 100
5.2 MFC常见类 102
5.2.1 文件服务类 102
5.2.2 窗口类 103
5.2.3 图形类 105
5.2.4 数据库支持类 106
5.3 异常处理 106
5.3.1 结构化异常处理 107
5.3.2 处理错误代码 108
5.3.3 在正确位置中处理错误 109
5.3.4 提高代码可读性 110
5.3.5 从构造函数中抛出异常 111
5.3.6 使用CException类 112
5.3.7 定义CException派生类 115
5.3.8 自定义CException派生类 119
5.4 高级异常处理技术 122
5.4.1 确定应该捕获异常的函数 122
5.4.2 放置在try块中的代码 123
5.4.3 放置在catch块中的代码 124
5.4.4 从虚函数中抛出异常 126
第6章 菜单、工具栏和状态栏 130
6.1 创建和编辑菜单 130
6.1.1 创建菜单 131
6.1.2 MFC中的菜单消息 132
6.2 快捷键 133
6.2.1 检查键盘输入 134
6.2.2 定义加速键 134
6.2.3 选择适当的加速键 135
6.2.4 多个加速键表 137
6.3 动态更改菜单 139
6.3.1 菜单命令范围 139
6.3.2 在运行时更改菜单 140
6.3.3 更改现有弹出菜单 141
6.3.4 永久及临时句柄映射 142
6.4 快捷菜单 144
6.5 创建和控制工具栏 145
6.5.1 MFC控件栏 146
6.5.2 创建和初始化工具栏 146
6.6 ReBar控件 151
6.7 创建和使用状态栏 152
6.7.1 创建状态栏 152
6.7.2 自定义状态栏 153
第7章 图形 157
7.1 图形设备接口 157
7.1.1 图形类型 157
7.1.2 GDI设备类型 159
7.2 设备快捷 159
7.2.1 设备快捷绘图属性 160
7.2.2 WM PAINT消息 162
7.2.3 绘制坐标 162
7.2.4 触发WM PAINT 163
7.2.5 响应除WM PAINT之外的其他消息进行绘图 164
7.3 处理文本 165
7.3.1 GDI颜色支持 165
7.3.2 对齐文本 167
7.3.3 调整文本 168
7.4 字体 169
7.4.1 什么是字体 169
7.4.2 将对象选入DC 169
7.4.3 选择常备字体 169
7.4.4 选择非常备字体 170
7.5 钢笔和画刷 173
7.5.1 钢笔 173
7.5.2 画刷 175
7.6 映射模式 177
7.7 光栅操作 178
7.7.1 文本绘图函数 179
7.7.2 文本坐标的计算 180
7.8 剪取区域 184
第8章 鼠标和键盘 186
8.1 输入及系统状态 186
8.2 鼠标输入 186
8.2.1 创建鼠标消息处理程序 187
8.2.2 在屏幕坐标和窗口坐标之间转换 188
8.3 创建处理鼠标事件的MFC程序 189
8.3.1 非客户鼠标事件 194
8.3.2 更改鼠标光标 195
8.4 创建更改鼠标指针的MFC演示程序 196
8.4.1 捕获鼠标 198
8.4.2 限制鼠标移动 199
8.5 键盘输入 200
8.5.1 物理键盘 200
8.5.2 回显键盘焦点 202
第9章 位图、调色板、DIB以及双缓存 208
9.1 位图内存和显存 208
9.2 创建CBitmap对象 209
9.3 加载和设置位图内容 210
9.4 将CBitmaps绘制到屏幕上 212
9.5 光栅操作 214
9.6 BlitDemo程序 216
9.7 调色板和颜色 221
9.7.1 逻辑调色板 222
9.7.2 调色板事件 224
9.7.3 SetSystemPaletteUse()函数 225
9.8 设备无关位图 225
9.8.1 设备无关位图文件剖析 225
9.8.2 CDib类 227
9.8.3 ShowDIB演示程序 234
9.9 双缓存 236
第10章 声音 239
10.1 播放录制好的声音 239
10.1.1 CWave类简介 239
10.1.2 使用Windows API播放波形文件 239
10.1.3 CWave类函数 241
10.2 WaveDemo程序 242
10.3 播放MIDI文件 245
10.3.1 什么是MIDI? 246
10.3.2 CMidi类简介 246
10.3.3 CMidi类函数 246
10.4 MIDIDemo程序 247
10.5 音乐CD 251
10.5.1 CCDAudio类库简介 251
10.5.2 媒体控制接口 251
10.5.3 CCDAudio类函数 252
10.6 CDPlayer程序 253
第11章 控件 260
11.1 控件的背景 260
11.2 创建控件 261
11.2.1 CButton类 263
11.2.2 CListBox类 264
11.2.3 CEdit类 267
11.2.4 CStatic类 270
11.2.5 CScrollBar类 273
11.2.6 CComboBox类 275
11.3 Mini Editor程序 278
11.4 高级控件编程 282
11.4.1 添加一个键盘界面 282
11.4.2 修改控件行为 283
11.4.3 位图按钮 284
11.4.4 更改控件的颜色 285
第12章 数据I/O 288
12.1 CString类 288
12.1.1 创建字符串 288
12.1.2 访问字符串数据 289
12.1.3 比较运算 290
12.1.4 抽取子串 291
12.1.5 搜索 292
12.2 StringDemo程序 293
12.3 CFile类 300
12.4 FileDemo程序 303
12.5 数据压缩 311
12.6 用于串行通信的CSerial类 315
12.7 CRegistry类 317
12.7.1 注册表值 317
12.7.2 预定义的注册表键 317
12.7.3 常用注册表键 318
12.7.4 CRegistry类的使用 319
12.8 剪贴板 320
第13章 线程 324
13.1 线程 324
13.1.1 创建工作者线程 324
13.1.2 线程函数 326
13.1.3 创建用户界面线程 326
13.1.4 挂起和继续执行线程 328
13.1.5 使线程睡眠 328
13.1.6 终止一个线程 329
13.1.7 从一个线程中终止另一个线程 329
13.1.8 线程、进程和优先级 332
13.2 在线程之间共享MFC对象 334
13.3 在多线程应用程序中使用C运行函数 336
13.4 ThreadDemo1程序 337
第14章 内存管理 342
14.1 进程私有内存 342
14.1.1 分配页 342
14.1.2 编译器内存分配 346
14.1.3 Win32私有堆 350
14.2 共享内存 353
14.2.1 内存映射文件I/O 353
14.2.2 动态分配共享页 357
14.2.3 静态分配共享页 359
第15章 文档、视图和SDI 362
15.1 CDocument类 362
15.1.1 在应用程序内声明文档类 362
15.1.2 CDocument的成员函数 364
15.1.3 文档和消息处理 364
15.1.4 重写虚文档函数 365
15.1.5 使用复杂文档数据 366
15.1.6 理解CCmdTarget和CDocltem的益处 368
15.2 Initlnstance函数 370
15.2.1 管理文档和视图 371
15.2.2 CSingleDocTemplate类 371
15.2.3 简介框架窗口 372
15.2.4 文档模板资源 372
15.2.5 字符串资源如何影响文档模板 372
15.2.6 分离字符串资源 373
15.2.7 看看常备视图资源 374
15.2.8 考虑文档模板生命周期 375
15.2.9 模板的高级用法 375
15.2.10 使用多个模板 375
15.2.11 销毁用AddDocTemplate()成员函数添加的文档 377
15.3 使用CView类 377
15.3.1 声明视图类 378
15.3.2 分析CView成员函数 379
15.3.3 视图和消息 380
15.3.4 CView类的MFC派生变形 381
15.3.5 CForm视图与基于对话框的应用程序 381
15.3.6 返回框架窗口 382
15.3.7 理解AfxGetMainWnd()的角色 382
第16章 MDI应用程序 390
16.1 管理文档、视图和框架窗口的复杂组合 390
16.1.1 使用多文档类型 390
16.1.2 使用文档的多个视图 391
16.1.3 CMDIFrameWnd类 392
16.1.4 CMDIChildWnd类 393
16.1.5 CMultiDocTemplate类 394
16.1.6 使用CDocument类的开销 394
16.1.7 进一步考虑MDI应用程序 395
16.2 拆分窗口 404
16.2.1 区分拆分窗口 404
16.2.2 理解特定于CSplitterWnd类的内容 404
16.2.3 动态拆分器 406
16.2.4 在动态窗格中使用不同的视图 407
16.2.5 使用CRuntimeClass对象 407
16.2.6 对与多个文档关联的视图使用拆分器 408
16.2.7 静态拆分器 409
16.2.8 创建静态拆分器 409
16.2.9 了解共享滚动条 410
16.2.10 确定实际的和理想的尺寸 410
16.2.11 了解拆分器的性能问题 410
16.3 为窗口定义子类 416
16.3.1 使用MFC定义窗口子类 417
16.3.2 文档/视图体系结构的替代 418
第17章 打印和打印预览 420
17.1 Windows API打印机支持 420
17.1.1 打印机信息 424
17.1.2 理解字符特征的重要性 425
17.2 PortLand程序 425
17.3 使用MFC 427
17.3.1 在打印过程中的任务和框架的角色 427
17.3.2 MFC打印序列 427
17.3.3 MFC默认打印方式 430
17.3.4 打印协议 430
17.3.5 取代视图类函数和分页 431
17.3.6 CPrintlnfo类 432
17.3.7 打印机的页和文档页 432
17.3.8 实现分页 432
17.3.9 添加帮助函数 435
17.3.10 打印时分页 437
17.3.11 页眉和页脚的打印 438
17.3.12 为打印分配GDI资源 438
17.3.13 扩大打印的图像 438
17.4 打印预览体系结构 439
17.4.1 打印预览过程 439
17.4.2 修改打印预览 439
17.4.3 增强应用程序的打印预览 440
17.4.4 CPrintDialog类 442
第18章 树视图和列表视图控件 447
18.1 CTreeCtrl类 447
18.1.1 树视图控件基础知识 447
18.1.2 CTreeCtrl控件 448
18.1.3 CtreeCtrl演示程序 454
18.2 CListCtrl类 459
18.2.1 列表视图基础知识 459
18.2.2 CListCtrl控件 459
第19章 ActiveX编程 465
19.1 各种ActiveX技术 465
19.1.1 理解自动化服务器 465
19.1.2 理解自动化控制器 465
19.1.3 定义ActiveX控件 466
19.1.4 理解组件对象(COM)模型对象 466
19.1.5 理解ActiveX文档 466
19.1.6 理解ActiveX容器 467
19.2 选择ActiveX组件类型 467
19.2.1 使用自动化服务器和控制器 467
19.2.2 使用ActiveX控件 468
19.2.3 使用COM对象 468
19.2.4 使用MFC来创建ActiveX组件 469
19.2.5 使用ActiveX模板库来创建ActiveX组件 469
19.2.6 使用BaseControl框架来创建ActiveX组件 470
19.2.7 创建自己的框架 471
19.3 基本ActiveX组件体系结构 471
19.3.1 ActiveX自动化服务器 471
19.3.2 ActiveX控件 472
19.4 建立ActiveX组件需要的支持工具 473
19.4.1 MIDL编译器 473
19.4.2 RegEdit程序 473
19.4.3 注册服务器 474
19.4.4 Ole2View程序 474
19.4.5 把工具添加到Visual C++开发环境中 474
19.5 用MFC创建一个基本的ActiveX控件 474
19.5.1 创建基本的控件项目 475
19.5.2 控件注册 478
19.5.3 创建方法 478
19.5.4 属性 484
19.6 标准绘制 494
第20章 动态链接库 498
20.1 动态链接库概述 498
20.1.1 静态和动态库 498
20.1.2 加载DLL 499
20.2 Visual C++常规DLL 499
20.2.1 了解常规DLL内部 500
20.2.2 实现自己的DllMain函数 501
20.2.3 动态加载DLL 502
20.2.4 何时动态加载DLL的例子 502
20.2.5 Windows异常分支 503
20.2.6 使用DLL的全局C++对象 509
20.3 MFC扩展DLL 516
20.3.1 扩展DLL 516
20.3.2 通过MFC扩展DLL导出类 516
20.3.3 关于AFX EXT CLASS的更多内容 517
20.3.4 使用嵌套的MFC扩展DLL 517
20.3.5 导出资源 518
20.3.6 编写在DLL中封装文档和视图的演示程序 518
第21章 数据库编程 523
21.1 ODBC定义与数据库术语 523
21.2 使用ODBC过程 524
21.2.1 配置ODBC 524
21.2.2 连接到一个数据源 525
21.2.3 查询数据和数据源 526
21.2.4 准备与执行SQL请求 527
21.2.5 检索数据 527
21.2.6 断开与数据源的连接 528
21.3 使用ODBC获取数据 529
21.3.1 为Visual C++项目添加对ODBC的支持 529
21.3.2 修改ODBCDemo话框 529
21.3.3 添加初始化和数据库代码 530
21.4 使用ODBC动态查询数据源 535
21.4.1 CODBCDynamic类声明 536
21.4.2 CODBCDynamic类如何工作 537
21.4.3 使用CODBCDynamic类 543
21.5 CDatabase对象 543
21.6 CRecordset类 546
21.6.1 构造一个记录集 549
21.6.2 打开一个记录集 549
21.6.3 使用RFX(记录字段交换)读写数据 550
21.6.4 过滤记录 551
21.6.5 排序返回的记录集中的记录 553
21.6.6 在结果集合中移动 554
21.6.7 保存记录 555
21.6.8 删除记录 555
21.7 使用MFC数据库类 555
21.7.1 添加对MFC数据库类的支持 555
21.7.2 加工具类以封装用户数据 556
21.7.3 表UserMaster创建CRecordset类 557
21.7.4 改对话框的头文件 557
21.7.5 改对话框的实现文件 557
21.8 参数化记录集与查询 563
21.8.1 为演示程序创建UI 564
21.8.2 创建UserMaster记录集 565
21.8.3 修改CRecordset类以接收参数 565
21.8.4 为应用程序添加查找功能 565
21.8.5 建立应用程序 567
21.8.6 创建参数化查询 567
21.8.7 演示数据库 567
21.8.8 创建权限记录集 568
第22章 Internet编程 572
22.1 ClnternetSession类 572
22.2 CFtpConnection类 573
22.2.1 从FTP服务器中检索文件 576
22.2.2 把文件发送给FTP服务器 578
22.2.3 其他FTP函数 579
22.2.4 ClnternetFile类 580
22.2.5 CFtpFileFind类 581
22.3 FTP程序 581
22.4 套接字和CSocket类 590
22.4.1 创建套接字 590
22.4.2 连接到套接字 591
22.4.3 监听一个连接 593