第1章 Visual C++6.0开发环境 1
1.1 主框架窗口 1
前言 1
1.1.1 菜单栏 2
1.1.2 工具栏 12
1.1.3 工作区 15
1.1.4 客户区 15
1.1.5 输出窗口 15
1.2 资源编辑器 16
1.2.1 加速键编辑器 16
1.2.2 对话框编辑器 16
1.2.5 串编辑器 17
1.2.3 图标编辑器 17
1.2.4 菜单编辑器 17
1.2.6 工具栏编辑器 18
1.2.7 版本信息编辑器 18
1.3 Visual C++实用工具 19
1.3.1 Spy++ 19
1.3.2 MFC Tracer 20
1.3.3 Error Lookup 20
1.3.4 WinDiff 20
1.3.5 ZoomIn 22
1.4 常用操作方法 23
1.3.8 HTML Help Workshop 23
1.3.7 Help Workshop 23
1.3.6 ActiveX Control Test Container 23
第2章 应用程序基本框架 26
2.1 用MFC AppWizard自动生成第一个Windows应用程序 26
2.1.1 工作区和工程 26
2.1.2 生成应用程序框架 26
2.1.3 工程的文件组成 32
2.2 程序的运行过程和应用框架 34
2.2.1 应用框架 34
2.2.2 程序运行过程 35
2.3 应用类 36
2.3.1 InitInstance( )函数 37
2.3.2 Run( )函数 41
2.3.3 ExitInstance( )函数 42
2.3.4 OnIdle( )函数 42
2.4 边框窗口类 42
2.4.1 文档边框窗口 42
2.4.2 主边框窗口类 42
2.4.3 子边框窗口类 43
2.5 文档类和视图类 44
2.5.1 文档模板类 44
2.5.2 文档类 45
2.5.3 视图类 45
2.6.1 上述对象的构造 46
2.6 上述各个类的对象之间的关系 46
2.6.2 上述对象之间的访问 47
第3章 菜单与加速键 48
3.1 消息 48
3.2 消息映射 48
3.3 命令消息处理过程和更新用户接口对象状态命令消息处理过程 50
3.4 命令消息的传递路径 51
3.5 菜单和加速键资源 53
3.5.1 菜单 53
3.5.2 键盘加速键 54
3.6 添加菜单 54
3.7 添加键盘加速键 59
3.8 菜单项的状态更新 60
第4章 对话框与控件 63
4.1 消息对话框 63
4.2 一般对话框的创建与使用流程 65
4.3 例程S4_1:使用对话框与控件 65
4.4 创建对话框资源 66
4.5 创建对话框类 68
4.5.1 类的生成 68
4.5.2 往程序中添加代码 69
4.5.3 消息响应函数 70
4.5.4 数据交换和校验 70
4.6 模态对话框 71
4.7 非模态对话框 73
4.8 属性页对话框 74
4.8.1 CPropertySheet类 74
4.8.2 CPropertyPage类 77
4.8.3 创建一般属性页对话框 79
4.8.4 创建向导对话框 80
4.9 通用对话框 83
4.10 控件 85
4.10.1 Picture控件 86
4.10.2 Static Text控件 86
4.10.3 Edit Box控件 86
4.10.4 Spin控件 87
4.10.5 Combo Box控件 88
4.10.6 Group Box控件 90
4.10.7 Radio Button控件 90
4.10.8 Check Box控件 90
4.10.9 Button控件 96
4.10.10 Slider控件 98
4.10.11 Horizontal Scroll Bar与Vertical Scroll Bar控件 101
4.10.12 Tab控件 104
4.10.13 Tree控件 107
4.10.14 List控件 111
4.10.15 Progress控件 114
4.10.16 Animate控件 117
第5章 控件栏 119
5.1 工具栏 119
5.2 例程S5_1 120
5.3 状态栏 126
5.4 对话框栏 129
第6章 绘图 132
6.1 DC和CDC类 132
6.2 GDL和CGdiObject类 133
6.3 绘图程序实例 134
7.2 字体应用程序之一 153
7.1 CFont类 153
第7章 文本与字体 153
7.3 字体应用程序之二 157
7.4 字体应用程序之三 159
第8章 打印 163
8.1 打印原理 163
8.2 CPrintInfo 164
8.3 CPageSetupDialog 166
8.4 例程S8_1 171
8.4.1 创建工程 171
8.4.2 增加资源 171
8.4.3 实现打印功能 172
9.1 串行化 176
第9章 文件操作 176
9.1.1 MFC程序框架支持的文档结构 177
9.1.2 CArchive类 179
9.1.3 直接使用串行化 182
9.2 CFile类 182
9.2.1 打开和关闭文件 182
9.2.2 文件的定位 183
9.2.3 文件的读写操作 183
9.2.4 文件的管理 184
9.2.5 文件导常 184
9.3 文件对话框 184
9.3.1 使用CFileDialog 185
9.3.2 选择多个文件 186
9.3.3 设计自己所需的文件对话框 186
9.4 内存文件类 186
9.4.1 CMemFile类 186
9.4.2 CSharedFile类 187
9.5 文件输入/输出流 188
9.6 内存映射文件 188
9.6.1 创建和打开内存映射文件 188
9.6.2 使用内存映射文件 189
9.6.3 使用内存映射文件共享数据 190
9.6.4 VLM的内存映射文件操作 191
9.7 文件操作例程 191
9.7.1 创建程序框架和使用框架支持的串行化操作 192
9.7.2 使用CStdioFile类 199
9.7.3 使用CFile、CArchive类和内存映射文件 201
第10章 多媒体制作 205
10.1 声音 205
10.1.1 两个例子 205
10.1.2 播放声音的三个简单函数 207
10.1.3 用MCI控制波形声音的播放 209
10.2 图像 223
10.2.1 Windows的BMP文件结构 224
10.2.2 显示DIB的程序实例 225
10.3 视频 231
11.2 数据库操作 234
11.2.1 异常处理 234
第11章 数据库编程 234
11.1 ODBC与DAO 234
11.2.2 新建数据库 235
11.2.3 打开数据库 235
11.2.4 关闭数据库 236
11.2.5 新建表 236
11.2.6 删除表 237
11.2.7 打开表 237
11.2.8 修改表结构 238
11.2.9 插入记录 238
11.2.11 修改记录 240
11.2.10 删除记录 240
11.3.1 CDaoWorkspace 241
11.3 DAO类 241
11.3.2 CDaoDatabase 244
11.3.3 DaoRecordset 246
11.3.4 CDaoQueryDef 251
11.3.5 CDaoTableDef 253
11.3.6 CDaoRecordView 255
11.3.7 CDaoFieldExchange 256
11.3.8 CDaoException 257
11.4.1 创建工程 258
11.4.2 增加、修改资源 258
11.4 例程S11_1 258
11.4.3 增加CCrack类 260
11.4.4 实现数据库功能 268
第12章 多线程 286
12.1 多线程概述 286
12.2 用户界面线程 287
12.2.1 创建用户界面线程 287
12.2.2 启动用户界面线程 288
12.2.3 使用用户界面窗口 289
12.3 工作者线程 289
12.3.1 实现控制函数 289
12.4.1 正常终止 290
12.3.2 启动工作者线程 290
12.4 线程的终止 290
12.4.2 异常终止 291
12.4.3 几种终止函数的比较 291
12.4.4 获取线程的退出码 292
12.5 线程的管理和操作 292
12.5.1 优先级 292
12.6.1 使用同步类控制访问共享数据 293
12.6.2 使用消息队列 293
12.6 线程间通讯 293
12.5.2 控制运行状态 293
12.7 使用同步类 294
12.7.1 同步对象 294
12.7.2 同步访问对象 296
12.8 多线程的调试 297
12.9 多线程例程 299
第13章 网络编程 311
13.1 网络应用程序 311
13.1.1 网络应用程序的结构 311
13.1.2 建立socket对象 311
13.1.5 监听socket 312
13.1.6 为客户端连接请求建立socket队列 312
13.1.3 建立连接 312
13.1.4 发送和接收数据 312
13.2 WinSock类 313
13.2.1 CAsyncSocket 313
13.2.2 CSocket 317
13.3 客户端应用程序例程S13_1 318
13.3.1 创建工程 318
13.3.2 增加、修改资源 319
13.3.3 增加CRequestSocket类 320
13.3.4 实现网络功能 322
13.4.1 创建工程 326
13.4.2 增加、修改资源 326
13.4 服务器端例程S13_2 326
13.4.3 增加CListeningSocket类 327
13.4.4 增加CClientSocket类 328
13.4.5 实现网络功能 329
第14章 动态链接库 333
14.1 DLL基础知识 333
14.1.1 DLL概述 333
14.1.2 MFC中的DLL 333
14.2 DLL入出口函数 334
14.2.1 DllMain函数 334
14.2.2 MFC AppWizrd生成的Regular DLL的入出口 335
14.3 从DLL中导出函数 335
14.3.1 使用DEF文件导出函数 336
14.3.3 使用AFX_EXT_CLASS导出 337
14.3.2 使用关键字-declspec(dllexport) 337
14.4 DLL中的数据和内存 338
14.4.1 从DLL加导出数据 338
14.4.2 多个进程共享DLL中的数据和内存 339
14.5 DLL中的资源 340
14.6 程序链接 341
14.6.1 隐式链接 341
14.6.2 显式链接 342
14.7 Visual C++6.0自动生成的Win32DLL 342
14.7.1 空的DLL工程 343
14.7.2 简单的DLL工程 343
14.7.3 导出了变量、函数和类的DLL 343
14.8.2 动态链接MFC的Regular DLL 344
14.8 MFC AppWizard生成的DLL 344
14.8.1 静态链接 MFC的Regular DLL 344
14.8.3 动态链接的MFC扩展DLL 345
14.9 DLL的使用和调试 346
14.9.1 DLL的使用 346
14.9.2 如何调试DLL 347
14.10 DLL例程 348
14.10.1 S14_DLL例程 348
14.10.2 S14_APP应用程序例程 354
第15章 组件 362
15.1 添加组件的一般方法 362
15.3 空闲时间处理(Idle time processing) 363
15.2 例程S15_1 363
15.4 往视图中添加弹出式菜单(Pop-up Menu) 364
15.5 制作软件封面(Splash screen) 366
15.6 切分视图窗口(Splitter Bar) 367
15.7 显示系统信息(System Info) 368
15.8 在软件启动时显示小提示(Tip of the day) 370
15.9 给控件添加小提示(ToolTip) 372
第16章 ActiveX控件 373
16.1 往工程中添加ActiveX控件 373
16.2 例程S16_1 374
16.2.1 创建工程 374
16.2.2 往工程中添加FlexGrid控件 374
16.2.3 使用FlexGrid控件 375
16.3 自定义ActiveX控件 378
16.4 例程S16_2 379
16.4.1 创建工程 379
16.4.2 测试ActiveX控件 379
16.4.3 注册/取消注册ActiveX控件 381
16.4.4 ActiveX控件的版本 381
16.4.5 定制ActiveX控件的图标 381
16.4.6 定制ActiveX控件的界面 382
16.4.7 添加栈属性 383
16.4.8 添加自定义属性 384
16.4.10 添加自定义事件 388
16.4.9 添加栈事件 388
16.4.11 添加栈方法 389
16.4.12 添加自定义方法 390
第17章 帮助的制作 391
17.1 HLP文件类型的帮助 391
17.1.1 RTF文件 392
17.1.2 Help Workshop 395
17.1.3 例程S17_1 395
17.1.4 WinHelp函数 399
17.2 HTML 402
17.2.1 HTML 402
17.2.2 例程S17_2 405
17.3 CHM类型的帮助 409
17.3.1 HTML Help Workshop 411
17.3.2 例程S17_3 412
17.3.3 HtmlHelp函数 414
第18章 MFC常用类 415
18.1 CArray 415
18.2 CPoint 417
18.3 CRect 419
18.4 CSize 422
18.5 CString 423
18.6 CStringArray 429
18.7 CTime 431
第19章 安装/卸载程序 434
19.1 安装/卸载程序 434
19.2 例程S19_1 434
19.2.1 InstallShield向导 434
19.2.2 Scripts标签 436
19.2.3 Components标签 436
19.2.4 Setup Types标签 438
19.2.5 Setup Files标签 439
19.2.6 File Groups标签 439
19.2.7 Resources标签 440
19.2.9 程序的卸载过程 441
19.2.8 Media标签 441
第20章 方法与技巧集锦 443
20.1 Visual C++常用操作技巧 443
20.1.1 打开和编辑二进制文件 443
20.1.2 检测括号是否匹配 443
20.1.3 检测#if语句和#endif语句是否匹配 443
20.1.4 删除工程的中间文件以便于备份工程 443
20.1.5 快速显示当前函数的有关信息 443
20.2 如何同进操作两个或两个以上的工程 444
20.3 如何优化工作区中的树目录 444
20.4 如何将工程中的MFC类添加到ClassWizard中 444
20.5 Visual C++命名规则 445
20.6 如何使工程链接时链入某些库文件 446
20.7 如何查看编译、链接的出错信息 447
20.8 如何在应用程序中使用中文 447
20.9 如何编写DOS控制台程序和C语言程序 447
20.10 如何在应用程序中启动其他应用程序 449
20.10.1 调用system函数 449
20.10.2 调用WinExec函数 449
20.10.3 调用ShellExecuate函数 450
20.10.4 调用CreateProcess函数 450
20.11 如何退出应用程序 451
20.12 用内存映射文件实现多个程序间互斥运行 452
20.13 如何禁止运行一个程序的多个实例 453
20.14 如何在程序中将其他窗口程序调至前台 454
20.15 设计通知栏图标程序 455
20.16 如何使MDI应用程序在刚启动时不建立一个新文件 456
20.17 如何删除指定目录及其目录下的所有文件和子目录 457
20.18 如何使用定时器 458
20.19 如何改变对话框的颜色 458
20.20 如何改变控件的颜色 459
20.21 如何获取对话框中控件的窗口指针并进行一些常用操作 459
20.22 如何制作图标按钮和位图按钮 459
20.23 如何明确对话框的UpdateData( )函数的参数含义 460
20.24 如何使对话框中的两个Edit Box控件的内容相关 460
20.26 如何使用CDC类进行裁剪输出 461
20.25 如何从其他应用程序中“借用”资源 461
20.27 设置视图类的空背景画刷,提高显示刷新速度 462
20.28 使用内存兼容位图对象绘制,提高显示刷新速度 463
20.29 实现全屏显示 464
20.30 如何在应用程序的整个窗口中获取鼠标的消息 466
20.31 如何使用注册表 467
20.31.1 RegCreateKeyEx 468
20.31.2 RegOpenKeyEx 470
20.31.3 RegQueryValueEx 470
20.31.4 RegSetValueEx 471
20.32.1 AddItem 472
20.32 如何通过DDE利用progman.exe创建程序组和程序项 472
20.31.5 RegDeleteKey 472
20.32.2 CreateGroup 473
20.32.3 DeleteGroup 473
20.32.4 DeleteItem 473
20.32.5 ExitProgman 473
20.32.6 Reload 474
20.32.7 ReplaceItem 474
20.32.8 ShowGroup 474
20.33 如何创建ODBC数据源 474
20.34 如何在Windows NT下直接对并行口进行操作 475
20.35 如何查询和设置系统参数信息 476
20.36 如何获取系统的度量信息和相关的配置信息 476