第1篇 Windows编程基础 2
第1章 Windows程序设计基础知识 2
1.1 Windows程序设计知识简述 2
1.1.1 Windows编程特点 2
1.1.2 Windows应用程序的编程模型 3
1.1.3 Windows程序基本结构 4
1.2 Windows程序的发展 4
1.2.1 传统的Windows编程 4
1.2.2 Windows与API函数 5
1.2.3 Windows与Win32API 5
1.2.4 Windows与面向对象 6
1.2.5 Windows对象与MFC对象 6
1.3 Windows编程应用工具 7
1.3.1 Windows编程工具简介 7
1.3.2 为何使用Visual C++ 8
1.3.3 Visual C++6.0的安装 8
1.3.4 Visual C++6.0集成开发环境 9
1.3.5 Visual C++6.0的基本使用 9
1.4 【实例】一个显示窗口的典型的Windows应用程序 10
1.4.1 创建应用程序 10
1.4.2 Windows程序生命期 12
1.4.3 Windows程序要素简介 12
1.4.4 Winmain()入口函数 13
1.4.5 WndProc()窗口处理函数 13
1.4.6 进队消息与不进队消息 14
1.4.7 设备描述表 14
1.4.8 应用程序的退出 15
1.5 【实例】建立第一个控制台应用程序 15
1.5.1 创建工程 15
1.5.2 控制台应用程序说明 16
1.5.3 编译并链接源程序 16
1.5.4 应用Visual C++调试器调试程序 17
1.6 Windows程序设计注意事项 17
1.6.1 Windows应用程序中的调用关系 18
1.6.2 Windows应用程序多任务处理 18
1.7 Windows程序常用事项 18
1.7.1 匈牙利式命名规则 18
1.7.2 代码的对齐 19
1.7.3 应用注释 20
1.7.4 MSDN的应用 21
1.8 小结 21
第2章 Win32编程基础 22
2.1 Win32程序开发流程 22
2.2 【实例】用Win32API编写一个简单的Windows程序 23
2.2.1 创建应用程序 23
2.2.2 调用头文件说明 23
2.2.3 WinMain()入口函数 23
2.2.4 API函数的调用 24
2.3 Win32编程思想 25
2.3.1 事件驱动的程序设计思想 25
2.3.2 消息和消息处理机制思想 25
2.3.3 动态链接技术 26
2.3.4 句柄 27
2.3.5 其他Win32编程思想 28
2.4 【实例】一个典型的Win32程序 28
2.4.1 程序入口WinMain 28
2.4.2 窗口类的注册与产生 29
2.4.3 消息循环 30
2.4.4 窗口函数的处理 30
2.4.5 消息映射 31
2.4.6 对话框的运行 32
2.4.7 模块定义文件 33
2.4.8 资源描述文件 33
2.5 进程与线程 34
2.5.1 内核对象 34
2.5.2 基于Win32的进程模式 35
2.5.3 进程的属性与资源 36
2.5.4 进程与线程的相关性 37
2.5.5 创建进程(CreatProcess)函数 37
2.5.6 【实例】进程的创建 38
2.5.7 控制与终止某进程 39
2.5.8 与进程相关的API函数 40
2.6 Win32程序的空闲处理 40
2.7 小结 41
第3章 创建Windows应用程序 42
3.1 创建Windows应用程序的方法 42
3.1.1 底层编程法 42
3.1.2 MFC编程法 42
3.1.3 高层编程法 43
3.2 【实例】建立一个简单的MFC应用程序 43
3.2.1 创建应用程序 43
3.2.2 MFC应用程序对象 44
3.2.3 建立框架窗口对象 45
3.2.4 绘制窗口 47
3.2.5 消息映射处理 48
3.2.6 有关字符串的定义 48
3.3 了解Windows应用程序的类型 49
3.4 关于AppWizard与ClassWizard 49
3.4.1 AppWizard应用程序向导 49
3.4.2 ClassWizard类向导 50
3.5 【实例】创建第一个MFCAppWizard工程—MDI应用程序 51
3.5.1 生成MDI应用程序框架 51
3.5.2 浏览应用程序文件及工作区中的项目 51
3.5.3 调试应用程序 52
3.6 关于MDI的说明 53
3.7 关于MDI应用程序框架的组成说明 53
3.7.1 应用程序对象 54
3.7.2 窗口对象 55
3.7.3 视图对象 55
3.7.4 文档对象 56
3.7.5 MFC的主要类及其层次关系 57
3.8 MDI应用程序的执行流程 57
3.9 MDI工程的相关文件说明 58
3.9.1 工程文件 58
3.9.2 资源文件 59
3.9.3 预编译文件 59
3.9.4 注册表项目文件 59
3.9.5 帮助文件 60
3.10 小结 60
第2篇 Windows绘图程序设计与消息 62
第4章 Windows应用程序输入设备 62
4.1 鼠标 62
4.1.1 鼠标设备基础知识 62
4.1.2 鼠标光标的热点 63
4.1.3 客户区与非客户区鼠标消息 63
4.1.4 鼠标跟随原理与WM_MOUSEMOVE 64
4.1.5 【实例】鼠标消息的捕获与应用 65
4.1.6 鼠标光标形状的设置 66
4.1.7 【实例】不同区域显示不同光标 67
4.2 键盘 69
4.2.1 键盘设备基础知识 70
4.2.2 接收键盘输入焦点消息及处理 70
4.2.3 获取击键消息 71
4.3 【实例】从键盘读取输入 72
4.3.1 为键盘数据建立存储区域 72
4.3.2 读取击键 72
4.3.3 键入的字符保存并显示 73
4.3.4 运行程序并键入字符测试 73
4.3.5 程序拓展—文档的永久保存 74
4.4 计时器 74
4.4.1 设置计时器 74
4.4.2 WM_TIMER消息 75
4.4.3 清除计时器WM_KILL 75
4.4.4 【实例】设置2个计时器程序 75
4.5 小结 79
第5章 Windows窗口中绘图 80
5.1 图形设备接口GDI 80
5.1.1 设备描述表类介绍 80
5.1.2 设备描述表类的应用方法 82
5.1.3 GDI绘图对象 83
5.1.4 【实例】用GDI绘图 86
5.2 绘图模式 87
5.2.1 绘图模式概述 88
5.2.2 【实例I绘图模式的应用—橡皮筋矩形的实现 88
5.3 Windows中的映射模式 90
5.3.1 映射模式概述 91
5.3.2 【实例】映射模式的应用 92
5.4 坐标转换 93
5.4.1 逻辑坐标与设备坐标 94
5.4.2 坐标转换的函数应用 95
5.4.3 【实例】坐标转换的应用 95
5.5 窗口与视口 96
5.5.1 概念介绍 96
5.5.2 窗口与视口的原点 97
5.5.3 窗口与视口的相关函数及其应用 97
5.6 窗口重绘函数 99
5.6.1 OnDraw与OnPaint函数 99
5.6.2 添加重绘资源 101
5.7 图形文件的操作 102
5.7.1 创建新文档 102
5.7.2 保存图形文件 102
5.7.3 打开图形文件 103
5.7.4 其他相关函数 103
5.8 【实例】鼠标绘制直线与圆形 104
5.8.1 绘图原理与WM_LBUTTONDOWN、WM_LBUTTONUP 104
5.8.2 集合数组类的应用—图形的保存 107
5.8.3 图形的重绘 108
5.8.4 坐标点的平移—图形拉伸效果的实现 109
5.8.5 实例拓展 110
5.9 小结 110
第6章 Windows应用程序窗口消息 111
6.1 窗口管理 111
6.1.1 C++窗口对象和Windows窗口对象 111
6.1.2 创建窗口 111
6.1.3 定位窗体 112
6.1.4 销毁窗体 113
6.2 主要编程对象—窗口 113
6.2.1 窗口结构与类型 114
6.2.2 窗口关系 115
6.2.3 窗口应用框架 117
6.3 窗口消息映射 117
6.3.1 Windows消息的分类 117
6.3.2 消息的结构 120
6.3.3 消息处理 120
6.3.4 窗口消息映射表 121
6.3.5 窗口消息的定位 122
6.3.6 消息映射宏的种类 122
6.3.7 消息的预处理 123
6.4 窗口消息处理机制 124
6.4.1 标准窗口消息处理 124
6.4.2 命令消息处理 125
6.4.3 消息反射处理 125
6.4.4 更新命令处理 126
6.4.5 自定义窗口消息 126
6.4.6 自定义命令 128
6.4.7 Post与Send消息 128
6.4.8 两进程窗口通信的注册消息 129
6.4.9 线程消息处理 130
6.4.10 跨进程消息处理 131
6.4.11 【实例】跨进程消息交换数据 132
6.5 【实例】MFC的窗口过程 133
6.5.1 MFC窗口过程的指定 133
6.5.2 对Windows消息的接收和处理 135
6.5.3 对命令消息的接收和处理 136
6.5.4 对控制通知消息的接收和处理 140
6.5.5 对更新命令的接收和处理 141
6.6 小结 144
第3篇 Windows界面设计与调度技巧 146
第7章 用户窗口界面的设计 146
7.1 Windows控件的设计与应用 146
7.1.1 Windows控件简介 146
7.1.2 静态控件 147
7.1.3 按钮 148
7.1.4 编辑框 151
7.1.5 列表框 153
7.1.6 组合框 156
7.1.7 滚动条 157
7.1.8 列表视图控件 158
7.1.9 树形控件 158
7.1.10 旋转、进度条和滑块控件 160
7.1.11 位图按钮、图像列表控件 162
7.1.12 自定义控件的颜色 163
7.2 菜单 165
7.2.1 菜单基础知识 166
7.2.2 创建菜单应用程序 166
7.2.3 创建上下文快捷/弹出式菜单 168
7.2.4 菜单应用程序加入对话框窗口 169
7.3 工具栏 170
7.3.1 创建工具栏 170
7.3.2 工具栏与应用程序相关联 172
7.3.3 工具栏的可见性 172
7.3.4 停靠栏 174
7.3.5 组合框加入工具栏 175
7.4 状态栏 176
7.4.1 创建普通状态栏 176
7.4.2 高级状态栏 177
7.4.3 在对话框中设置状态栏 180
7.5 对话框的设计 181
7.5.1 对话框原理介绍 182
7.5.2 模式对话框与无模式对话框的设计 182
7.5.3 系统通用对话框的应用 183
7.5.4 自定义对话框形状 188
7.5.5 对话框与控件的数据交互 188
7.5.6 对话框与文档视图的数据交互 190
7.6 【实例】将文本框与组合框加入列表视图控件实例 190
7.6.1 准备知识 190
7.6.2 创建结构体 196
7.6.3 创建所需相关类 197
7.6.4 功能实现 198
7.7 小结 199
第8章 Windows文件系统与序列化 200
8.1 文件CFile类 200
8.1.1 创建、打开与关闭文件 201
8.1.2 文件的读、写 202
8.1.3 移动文件指针 203
8.1.4 临时文件的操作 204
8.1.5 监控目录,搜索文件 205
8.1.6 文件属性的获取和更改 206
8.1.7 文件的分割与合并 208
8.1.8 锁定文件 209
8.1.9 CFile的派生类 210
8.2 文件的序列化 210
8.2.1 序列化基础 211
8.2.2 序列化函数Serialize 214
8.2.3 自定义可序列化类 217
8.3 【实例】普通文件的编辑器 218
8.3.1 项目框架程序 218
8.3.2 初始化文档数据 219
8.3.3 文件串行化处理 220
8.3.4 文本数据的显示 220
8.3.5 文本字体的设定 222
8.4 小结 223
第9章 文档与视图 224
9.1 文档与视图的概述 224
9.1.1 文档与视图的关系 224
9.1.2 文档与视图的接口 225
9.1.3 SDI与MDI应用程序的区别 225
9.2 文档/视图框架结构的关系 226
9.2.1 MFC各对象间的关系 226
9.2.2 文档类 227
9.2.3 视图类 227
9.2.4 框架窗口类 228
9.2.5 文档模板类 228
9.2.6 多文档 229
9.2.7 多视图 230
9.2.8 拆分窗口 230
9.2.9 文档/视图的滚动处理 231
9.3 文档类 233
9.3.1 文档的生命周期 233
9.3.2 文档的操作与函数的重载 234
9.3.3 设置文档修改标志 235
9.3.4 文档的序列化保存 235
9.3.5 关闭并销毁文档 235
9.4 视图类 235
9.4.1 视图类的函数 236
9.4.2 初始化社图 236
9.4.3 视图与文档的数据交互 236
9.4.4 多个视图添加到单个文档 237
9.5 文档/视图与框架的交互 238
9.5.1 框架窗口的处理 239
9.5.2 框架命令的处理 239
9.5.3 框架与文档/视图的交互 240
9.6 打印的设置 241
9.6.1 文档与视结构中的打印流程 241
9.6.2 自定义打印功能的实现 243
9.6.3 打印预览 244
9.6.4 【实例】图像打印程序 245
9.7 【实例】多文档和多视图的编程 249
9.7.1 创建多文档与多视图 249
9.7.2 定义新视图类 250
9.7.3 修改子框架窗口CChildFrame 252
9.8 小结 253
第10章 程序调试与编程技巧 254
10.1 调试VisualC++程序 254
10.1.1 bugs程序 254
10.1.2 设置断点 255
10.1.3 单步执行 256
10.1.4 检查运行时程序的数据 257
10.1.5 编辑并继续 260
10.2 其他相关处理 260
10.2.1 异常处理 261
10.2.2 诊断调试 262
10.2.3 用VisualC做远程调试 264
10.2.4 使用调试功能检测内存泄漏 264
10.3 DEBUG版本与RELEASE版本 269
10.4 其他应用技巧 270
10.4.1 全面清除历史记录的实例 270
10.4.2 清理VisualC++工程 275
10.4.3 通过优化使代码效率更高 275
10.4.4 VisualC++编译时加快链接 276
10.4.5 代码维护技巧 277
10.5 小结 277
第4篇 Windows数据库、网络通信与ActiveX控件 280
第11章 数据库的程序设计 280
11.1 数据库概述 280
11.1.1 应用VisualC++开发数据库的特点 280
11.1.2 VisualC++开发数据库的技术 281
11.2 ODBC数据库管理 281
11.2.1 ODBC的体系结构 282
11.2.2 SQL操作 283
11.2.3 用MFCODBC访问数据库 285
11.3 DAO数据库访问对象 287
11.3.1 基于DAO的程序特色 287
11.3.2 用DAO开发数据库应用程序 288
11.4 【实例】ODBC技术开发数据库 290
11.4.1 创建数据源 290
11.4.2 创建ODBC应用程序 290
11.4.3 增加数据表记录 292
11.4.4 删除数据表记录 294
11.4.5 查找数据表记录 294
11.5 小结 295
第12章 网络通信程序设计 296
12.1 网络体系结构与协议 296
12.1.1 OSI参考模型 296
12.1.2 TCP/IP分层模型 298
12.1.3 IP地址 300
12.1.4 TCP/IP 302
12.1.5 UDP协议 302
12.1.6 客户端服务器模型 303
12.2 WindowsSockets编程 304
12.2.1 Socket(套接字)介绍 304
12.2.2 Socket程序设计 305
12.2.3 【实例】WinSock程序 308
12.3 MFC套接字编程 311
12.3.1 套接字类CAsyncSocket的介绍 312
12.3.2 套接字类CSocket的应用 313
12.3.3 CSocket类的应用特点 314
12.4 WinInet编程 316
12.4.1 MFC的类WinInet 316
12.4.2 WinInet编程方法介绍 317
12.5 FTP编程 318
12.5.1 FTP简介 319
12.5.2 FTP客户端编程 320
12.5.3 FTP的断点续传 326
12.6 【实例】创建Web浏览器 326
12.6.1 准备知识 326
12.6.2 建立Web浏览器框架 327
12.6.3 应用程序实现代码 328
12.7 小结 331
第13章 COM、OLE与ActiveX技术 332
13.1 组件对象模型COM 332
13.1.1 创建COM对象 333
13.1.2 对象的生存期 333
13.1.3 获取接口指针 334
13.1.4 创建COM服务器 334
13.1.5 定位透明度 336
13.2 OLE技术概述 337
13.2.1 结构化存储 337
13.2.2 Monikers介绍 338
13.2.3 统一数据传输 338
13.2.4 OLE文档 339
13.2.5 OLE自动化 339
13.3 ActiveX技术概述 340
13.3.1 ActiveX控件 341
13.3.2 ActiveX文档 342
13.3.3 ActiveX控件容器 343
13.3.4 创建Activex控件 344
13.3.5 注册ActiveX控件 347
13.3.6 插入Activex控件 348
13.4 【实例】ActiveX时钟控件 350
13.4.1 创建时钟控件的基本功能 350
13.4.2 控件属性 351
13.4.3 使用属性页 354
13.4.4 设置控件的事件 355
13.4.5 添加控件方法 356
13.5 小结 356
第5篇 Windows内部处理技术 358
第14章 多线程应用程序的设计 358
14.1 线程基本知识概述 358
14.1.1 线程的ID和句柄 358
14.1.2 设置线程的优先级 359
14.1.3 多任务与多线程 360
14.2 创建和使用线程 361
14.2.1 创建线程CreateThread00函数 361
14.2.2 线程的分类 363
14.2.3 启动及初始化线程 363
14.2.4 悬挂和恢复线程 366
14.2.5 线程的休眠 366
14.2.6 终止线程 366
14.2.7 【实例】创建工作者线程 367
14.3 实现多线程同步的相关知识 368
14.3.1 线程的同步机制 369
14.3.2 临界区对象 369
14.3.3 互斥内核对象 372
14.3.4 事件内核对象 374
14.3.5 信号量内核对象 378
14.3.6 线程局部存储 381
14.3.7 互锁函数 382
14.4 【实例】多线程的应用 382
14.4.1 添加线程对象和线程函数 382
14.4.2 添加鼠标左键触发函数 383
14.4.3 添加状态栏坐标提示 383
14.5 小结 384
第15章 Windows系统与内存的管理 385
15.1 驱动器和文件目录 385
15.1.1 驱动器卷标操作 385
15.1.2 逻辑驱动器的操作 386
15.1.3 格式化驱动器 387
15.1.4 文件目录操作 388
15.2 注册表的应用 389
15.2.1 注册表的结构 389
15.2.2 注册表的管理 390
15.2.3 【实例】用注册表键存储用户信息 393
15.3 任务栏状态区 395
15.3.1 任务栏状态区操作函数 395
15.3.2 任务栏状态区托盘程序的实现 396
15.4 控制面板 398
15.4.1 控制面板的工作原理 399
15.4.2 控制面板应用程序的实现 400
15.5 内存管理 402
15.5.1 Windows内存分布 402
15.5.2 内存属性与状态 403
15.5.3 全局内存与虚拟内存 405
15.5.4 虚拟内存管理 407
15.5.5 自由的、保留的和已提交的虚拟内存 407
15.5.6 释放虚拟内存 409
15.5.7 改变虚拟内存页的保护 409
15.5.8 锁定虚拟内存页 409
15.5.9 查询进程的虚拟内存 410
15.6 内存映射文件 410
15.6.1 内存映射文件的用途 410
15.6.2 内存映射文件的编程流程 412
15.6.3 内存映射文件的视图 412
15.7 【实例】用内存映射文件处理大文件 413
15.7.1 创建文件内核对象 414
15.7.2 创建文件映射内核对象 414
15.7.3 文件数据及视图的映射 416
15.7.4 关闭文件对象和文件映射对象 416
15.8 小结 417
第16章 动态链接库DLL和钩子 418
16.1 动态链接库DLL 418
16.1.1 动态链接的特点 418
16.1.2 VisualC15支持的动态链接库类型 419
16.1.3 DLL入口函数 420
16.1.4 DLL函数的导出 421
16.1.5 连接DLL的方式—显式和隐式 423
16.2 【实例】应用共享MFCDLL创建一个DLL 424
16.3 【实例】测试DLL文件 424
16.3.1 创建应用程序框架 424
16.3.2 编辑对话框并添加相应执行函数 424
16.3.3 连接待测试的DLL库文件 425
16.4 Windows钩子 426
16.4.1 钩子的定义及类型 426
16.4.2 钩子链表和钩子子程 429
16.4.3 钩子的安装与卸载 429
16.4.4 全局钩子与线程钩子 430
16.4.5 传递事件的函数 430
16.5 【实例】应用钩子机制截获鼠标点击次数 431
16.5.1 创建钓子DLL文件 431
16.5.2 创建调用钩子DLL文件的程序 432
16.5.3 运行并测试 433
16.6 Win32API的挂钩技术 433
16.6.1 网络监控技术 434
16.6.2 屏幕取词技术 434
16.6.3 防止进程结束技术 435
16.6.4 DLL注入机制 435
16.6.5 系统服务的挂钩 437
16.7 小结 438
第17章 Windows内核程序设计与防火墙开发 439
17.1 Windows操作系统和CPU的保护模式 439
17.1.1 Windows层次结构 439
17.1.2 CPU保护模式 440
17.1.3 内核模式和用户模式 440
17.2 Windows系统服务 441
17.2.1 常用API服务函数 441
17.2.2 设计服务程序 443
17.3 内核驱动程序设计 447
17.3.1 内核及内核对象 447
17.3.2 内核模式编程环境 447
17.3.3 内核钩子 449
17.3.4 【实例】最小化驱动程序 451
17.4 Windows防火墙 454
17.4.1 防火墙核心功能概述 454
17.4.2 代理防火墙与服务器 455
17.4.3 防火墙的工作流程 456
17.4.4 防火墙模块的划分 457
17.5 网络封包截获技术 457
17.5.1 过滤驱动程序的特性 457
17.5.2 传输层截获网络封包技术 457
17.5.3 网络驱动程序接口规范 457
17.5.4 中间驱动程序的特性 458
17.5.5 网络中间驱动程序截获网络封包技术 458
17.6 【实例】Windows个人防火墙系统的实现 459
17.6.1 Filter-Hook驱动 459
17.6.2 创建内核模式驱动 459
17.6.3 过滤函数 462
17.6.4 设置过滤函数 465
17.6.5 防火墙应用户操作界面的实现 466
17.6.6 防火墙应用程序的实现 467
17.7 小结 470