Windows编程循序渐进 / 张静盛编著. —北京:机械工业出版社,2008.5
(原创精品系列)
ISBN 978-7-111-23862-1
机械工业出版社(北京市西城区百万庄大街22号 邮政编码 100037)
责任编辑:李东震
2008年5月第1版第1次印刷
186mm×240mm·24.75印张
标准书号:ISBN 978-7-111-23862-1
ISBN 978-7-89482-630-5(光盘)
凡购本书,如有倒页、脱页、缺页,由本社发行部调换
本社购书热线(010)68326294
[华章公司]《Windows编程循序渐进》宣传活动,暨第一届软件设计大赛
中国互动出版网:http://www.china-pub.com/39896
下面是互动网上的价格:
市场价 : ¥59.00
会员价 : ¥41.30(70折)
校园特惠价 : ¥41.30
机械工业出版社购书热线:(010)68326294
screen.width*0.6) {this.width=screen.width*0.6;this.alt='此图已经缩小,点击察看原图。';}" onmouseover="this.style.cursor='pointer';" onclick="window.open('http://bbs.pediy.com/attachment.php?attachmentid=16310&d=1216733923');" border="0">
本书用大量的实例演示使用Visual C++开发Windows应用程序的相关技术。 全书分为3篇19章,分别是软件设计基础篇、软 件设计综合应用篇、Windows系统程序设计篇。内容包括软件开发起步、对话框应用程序、基本控件、文档与视图、GDI绘图技术、键盘与鼠标消息、网络 通信基础、密码学算法、多媒体技术、数据库技术、综合实例开发、进程与线程、内存管理、进程间通信、线程同步、动态链接库、结构化异常处理、可执行文件格 式(PE)、模块注入与函数挂接技术。 本书适用于Windows程序设计的初学者,也可作为大中专院校相关专业教材。另外,本书还适合稍有基础的 Visual C++开发者阅读参考。
本书设计了大量的实例演示Windows应用程序开发过程中相关技术,分为3个部分:
(1)软件设计基础篇。
第1章,软件开发起步:编写第一个软件,熟悉MFC应用程序框架。
第2章,对话框应用程序:熟悉模态、非模态对话框,以及通常对话框的原理与使用方法。
第3章,基本控件:介绍按钮、编辑框、列表框等基本控件的使用方法。
第4章,文档与视图:介绍文档与视图的基本原理。
第5章,GDI绘图技术:介绍GDI绘图技术的基本的GDI对象。
第6章,键盘与鼠标消息:介绍键盘、鼠标消息的处理与模拟。
(2)软件设计综合应用篇。
第 7章,网络通信基础:介绍网络模型、协议、以及套接字编程和LSP的实现。
第 8章,密码学算法:介绍常见的密码学算法及其实现。
第 9章,多媒体技术:介绍几种多媒体控件的使用方式和屏幕截图、录象的实现。
第10章,数据库技术:介绍MFC ODBC和DAO基本使用方法。
第11章,综合实例开发:实现多个具有趣味性的实例。
(3)Windows系统程序设计篇。
第12章,进程与线程:介绍进程与线程的原理及其基本应用。
第13章,内存管理:介绍虚拟内存与内存映射两种内存管理机制。
第14章,进程间通信:介绍共享内存、管道等进程间通信方式的原理与实现方法。
第15章,线程同步:介绍多种线程同步技术,包括使用内核对象实现线程同步。
第16章,动态链接库:介绍DLL的基本原理,包括TLS机制。
第17章,结构化异常处理:介绍结构化异常处理机制,及其在VC++环境下的特性。
第18章,可执行文件格式(PE):介绍PE文件格式及其基本应用。
第19章,模块注入与函数挂接技术:介绍模块注入及函数挂接技术及其防御。
本书通过80多个程序实例,介绍了使用Visual C++ 2005开发Windows应用程序的方方面面的技术。全书分为基础篇、综合应用 篇和Windows系统程序设计篇,既包括对话框、控件、文档与视图等基本开发技能,也涉及到网络通信、密码学算法、多媒体技术等综合应用开发技术,还深 入到了进程与线程、内存管理、动态链接库等较高级的系统程序设计话题。
本书具有以下特色:
以作者的技术成长路线为基础,循序渐进地学习Windows系统程序设计和应用软件开发;
涵盖基本开发技能、综合应用开发技术和系统程序设计技术,全面而细致;
实例导向,目标驱动;使读者的阅读过程既轻松而愉快,又学有所获;
循序渐进,从理论到实践,从技术学习转换为产品开发;
专业论坛支持,看雪软件安全论坛(http://bbs.pediy.com)编程版块能够帮助你解决阅读中的疑问,更好地掌握本书中的内容。
编写本书的主要目的是知识总结与经验分享。
对于我来说,知识总结在学习的过程中是必不可少的,就像操作系统需要“磁盘整理”一样。当很长一段时间不对系统进行“磁盘整理”操作,系统性能就 会下降。经常总结所学知识,从总体把握体系结构,让自己能够长期保持良好地学习状态。本书实例的一部分来自于学习过程,这里只是按照知识体系把这些实例串 联起来。
学习过程重要,知识的交流与分享也同样重要。我曾经在看雪软件安全论坛编程版块建立《Windows系统程序设计》专题,与大家分享学习心得,也有一部分朋友参与到这个专题。感觉收获比较大,但意犹未尽,于是就产生编写本书的想法。
现在计算机专业的绝大部分学生就业压力越来越大,归根到底就是不被社会所承认。有些人认为学校所传授的知识与实际应用不接轨,有些人认为许多非计 算机专业人员进入这个领域导致竞争激烈。而在我看来,作为计算机专业学生应该尽量寻找主观原因。对于计算机专业学生,在大学4年的自由时代,如何有效利用 计算机资源是问题的关键所在。摆在眼前的是两个选择:游戏与技术。每个人都能从不同游戏中获取乐趣,但对于技术呢?谁来展现技术的魅力?谁来引导学生对技 术的兴趣?这也是编写本书的一个重要原因,希望能够引导学生朋友对计算机技术的兴趣,能够在学习技术的过程中获得乐趣,能够从学校走出更多的计算机专业人 才。
由 于水平有限与时间紧迫,书中难免出现差错和遗漏。如果有关于本书的任何问题,欢迎发送电子邮件到 zhangjingsheng_nbu@hotmail.com。如果希望交流本书内容,可以发送电子邮件,也可以到看雪软件安全论坛 (http://bbs.pediy.com)的编程版块进行交流。
感谢李纲老师,让我明白“学习贵在精而不在多”,在程序设计与算法领域打下坚实基础。
感谢徐海峡、郭忠翔,让我明白什么是“能够解决问题的人”,坚定地朝自己的方向前进。
感谢段钢(kanxue),感谢看雪软件安全论坛,论坛是我兴趣的源泉,成长的起点。
感谢213实验室的良师益友,一起学习一起娱乐一起成长,让我的大学生活丰富多彩。
感谢我的家人和朋友,你们的支持是对我最大的鼓励
第一篇 软件设计基础篇
第1章 软件开发起步 2
1.1 建立MFC应用程序 2
1.2 分析框架结构 4
1.2.1 框架代码文件的结构 4
1.2.2 应用程序类 5
1.2.3 对话框类 6
1.2.4 添加消息响应 7
第2章 对话框应用程序 9
2.1 模态对话框 9
2.1.1 实例:使用MFC实现模态对话框 9
2.1.2 实例:使用Win32 API实现模态对话框 10
2.2 非模态对话框 12
2.2.1 实例:使用MFC实现非模态对话框 12
2.2.2 实例:使用Win32 API实现非模态对话框 13
2.3 属性对话框 14
2.3.1 实例:多页面切换程序 14
2.3.2 实例:向导对话框 16
2.4 对话框设计技巧 17
2.4.1 控件对齐与排列 17
2.4.2 设置控件逻辑顺序 18
2.5 通用对话框 19
2.5.1 实例:通用“打开”和“另存为”对话框 19
2.5.2 实例:通用“字体”对话框 22
2.5.3 实例:通用“颜色”对话框 23
第3章 基本控件 26
3.1 按钮控件 26
3.1.1 按钮CButton类 26
3.1.2 实例:按钮控件的使用方法 28
3.2 编辑框 30
3.2.1 编辑框CEdit类 30
3.2.2 实例:编辑框的使用方法 32
3.3 列表框 33
3.3.1 列表框CListBox类 33
3.3.2 实例:列表框的使用方法 35
3.4 组合框 36
3.4.1 组合框CComboxBox类 37
3.4.2 实例:组合框的使用方法 39
3.5 进度条 41
3.5.1 进度条CProgressCtrl类 41
3.5.2 实例:进度条的使用方法 42
3.6 列表控件 44
3.6.1 列表控件CListCtrl类 44
3.6.2 实例:列表控件的使用方法 45
第4章 文档与视图 47
4.1 文档—视图结构 47
4.1.1 单文档与多文档 47
4.1.2 文档与视图体系 48
4.2 实例:单文档应用程序与文档串行化 52
第5章 GDI绘图技术 57
5.1 图形设备接口GDI 57
5.1.1 设备上下文 57
5.1.2 GDI对象 58
5.1.3 GDI绘图 58
5.2 画笔 58
5.2.1 画笔CPen类 58
5.2.2 实例:使用GDI对象CPen绘图示例 59
5.3 画刷 60
5.3.1 画刷CBrush类 60
5.3.2 实例:使用GDI对象CBrush绘图示例 61
5.4 位图 63
5.4.1 位图CBitmap 63
5.4.2 实例:使用GDI对象CBitmap示例 64
第6章 键盘与鼠标消息 67
6.1 键盘消息 67
6.1.1 键盘消息的类型 67
6.1.2 实例:响应键盘消息示例 68
6.1.3 模拟键盘消息 70
6.1.4 实例:模拟键盘消息示例 71
6.2 鼠标消息 72
6.2.1 鼠标消息的类型 72
6.2.2 实例:处理鼠标消息 73
6.2.3 实例:模拟鼠标消息 74
第二篇 软件设计综合应用篇
第7章 网络通信基础 80
7.1 网络模型 80
7.1.1 OSI参考模型 80
7.1.2 TCP/IP参考模型 81
7.2 基础协议 82
7.2.1 IP协议 82
7.2.2 TCP协议 83
7.2.3 UDP协议 84
7.2.4 ICMP协议 85
7.3 套接字编程 85
7.3.1 函数介绍 85
7.3.2 实例:Ping程序 88
7.3.3 实例:网络嗅探器 92
7.4 服务器与客户端模型 96
7.4.1 实例:TCP服务端和客户端程序 96
7.4.2 实例:UDP服务器和客户端程序 100
7.5 实例:使用分层服务提供者LSP截取网络数据包 103
7.5.1 服务提供者接口(SPI) 103
7.5.2 设计实例 103
7.5.3 枚举协议目录 106
7.5.4 LSP的安装与卸载 108
7.5.5 分层服务提供者(LSP) 113
第8章 密码学算法 118
8.1 数据加密标准(DES) 118
8.1.1 算法描述 118
8.1.2 初始置换与逆初始置换 119
8.1.3 生成子密钥 120
8.1.4 f函数的执行流程 121
8.1.5 解密过程 122
8.1.6 实例:DES算法加密解密演示 123
8.2 国际数据加密算法(IDEA) 131
8.2.1 算法描述 131
8.2.2 生成子密钥 133
8.2.3 实例:IDEA算法加密解密演示 134
8.3 Blowfish算法 139
8.3.1 算法描述 139
8.3.2 生成子密钥和S盒 141
8.3.3 实例:Blowfish算法加密解密演示 141
8.4 公钥加密算法(RSA) 146
8.4.1 算法描述 146
8.4.2 实例:RSA加密解密演示软件 147
第9章 多媒体技术 151
9.1 多媒体控件 151
9.1.1 实例:使用Animation控件播放AVI文件 151
9.1.2 实例:使用Windows Media Player控件播放多媒体文件 152
9.1.3 实例:使用Real Player控件播放多媒体文件 153
9.2 屏幕截图 154
9.2.1 位图 154
9.2.2 实例:屏幕截图 155
9.3 屏幕录像 157
9.3.1 实现原理 157
9.3.2 实例:屏幕录像 158
第10章 数据库技术 161
10.1 设置ODBC数据源 161
10.1.1 ODBC数据源 161
10.1.2 使用ODBC管理器设置Access数据源 162
10.2 MFC ODBC数据库编程 163
10.2.1 MFC ODBC概述 163
10.2.2 实例:使用MFC ODBC访问数据库 164
10.3 MFC DAO数据库编程 169
10.3.1 MFC DAO概述 169
10.3.2 实例:使用MFC DAO访问
数据库 169
第11章 综合实例开发 174
11.1 实例:Huffman编码软件 174
11.1.1 Huffman算法原理 174
11.1.2 具体实现 175
11.2 实例:八数码游戏 178
11.2.1 八数码游戏算法介绍 178
11.2.2 具体实现 179
11.3 实例:游戏寻路算法A* 183
11.3.1 A*算法原理 183
11.3.2 二叉堆在A*中的应用 184
11.3.3 具体实现 186
11.4 实例:“连连看”游戏辅助工具 190
11.4.1 “连连看”算法原理 190
11.4.2 具体实现 191
11.5 实例:“对对碰”游戏辅助工具 196
11.5.1 “对对碰”算法原理 196
11.5.2 具体实现 197
11.6 实例:拼音输入法 199
11.6.1 设计实例 200
11.6.2 拼音字典存储结构—Trie树 200
11.6.3 单字联想 205
11.7 实例:Windows二级文件系统 209
11.7.1 设计实例 209
11.7.2 具体实现 211
11.8 实例:手柄测试器 214
11.8.1 DirectInput手柄输入 214
11.8.2 设计实例 216
第三篇 Windows系统程序设计篇
第12章 进程与线程 222
12.1 进程 222
12.1.1 原理介绍 223
12.1.2 创建进程 223
12.1.3 实例:创建进程 226
12.2 线程 227
12.2.1 原理介绍 227
12.2.2 创建线程 229
12.2.3 实例:创建线程 229
12.3 枚举进程/线程信息 231
12.3.1 实例:使用PSAPI示例 231
12.3.2 实例:使用ToolHelpAPI示例 233
12.3.3 实例:使用Native API示例 235
第13章 内存管理 239
13.1 虚拟内存 239
13.1.1 进程虚拟地址空间 239
13.1.2 实例:查看虚拟内存状态 240
13.1.3 实例:演示虚拟内存的“保留—提交”特性 243
13.1.4 实例:游戏内存修改器 245
13.2 内存映射文件 249
13.2.1 内存映射文件的原理 249
13.2.2 实例:文件分割器 250
第14章 进程间通信 254
14.1 消息传递机制 254
14.1.1 消息传递 254
14.1.2 实例:使用WM_COPYDATA消息传递数据 254
14.2 共享内存 256
14.2.1 共享内存的原理 256
14.2.2 实例:使用共享内存示例 257
14.3 管道和邮槽 259
14.3.1 管道和邮槽通信原理 259
14.3.2 实例:使用匿名管道重定向程序输出 261
14.3.3 实例:命名管道示例 263
14.3.4 实例:邮槽通信示例 266
14.4 剪贴板 267
14.4.1 剪贴板通信机制 267
14.4.2 实例:使用剪贴板实现进程间通信示例 269
第15章 线程同步 275
15.1 原子访问 275
15.1.1 多线程访问共享数据问题 275
15.1.2 互锁系列函数 276
15.2 关键代码段 277
15.2.1 基本原理 277
15.2.2 实例:多线程环境下的数据共享 278
15.3 内核对象与等待函数 280
15.3.1 内核对象 280
15.3.2 等待函数 281
15.4 事件内核对象 283
15.4.1 基本原理 283
15.4.2 实例:使用事件内核对象示例 284
15.5 等待定时器内核对象 285
15.5.1 基本原理 285
15.5.2 实例:使用等待定时器的APC机制 287
15.6 信标内核对象 288
15.6.1 基本原理 288
15.6.2 实例:使用信标内核对象示例 289
15.7 互斥内核对象 291
15.7.1 基本原理 292
15.7.2 实例:使用互斥内核对象示例 292
第16章 动态链接库 295
16.1 DLL基础 295
16.1.1 DLL的隐式链接 295
16.1.2 DLL的显示加载 296
16.2 编写动态链接库 297
16.2.1 入口函数DllMain 297
16.2.2 实例:编写DLL实现导出变量、函数、类 298
16.3 线程本地存储器(TLS) 301
16.3.1 静态TLS和动态TLS 301
16.3.2 实例:使用静态TLS示例 303
16.3.3 实例:使用动态TLS示例 304
第17章 结构化异常处理 306
17.1 SEH的概念、特性 306
17.2 SEH的基本使用方法 307
17.2.1 结束异常程序 307
17.2.2 异常处理程序 310
17.2.3 顶层异常处理 313
17.3 VC++编译器级SEH的具体实现 313
17.3.1 SEH相关数据结构的介绍 314
17.3.2 异常处理链结构图 315
17.3.3 实例:单嵌套异常块演示程序 316
17.3.4 实例:多嵌套异常块演示程序 318
17.3.5 VC++编译器级异常帧结构 320
17.3.6 VC中的顶层异常处理 320
17.3.7 VC搜索异常处理程序流程 322
第18章 可执行文件格式 324
18.1 PE文件格式 324
18.1.1 PE文件头 324
18.1.2 可选文件头 325
18.1.3 区块表 327
18.1.4 输入表 328
18.1.5 输出表 329
18.1.6 资源表 330
18.1.7 重定位表 332
18.1.8 绑定输入表 332
18.2 综合应用 333
18.2.1 实例: PE文件资源查看器 333
18.2.2 实例: 为应用程序添加Nag窗口 337
第19章 模块注入与函数挂接技术 341
19.1 模块注入 341
19.1.1 添加导入表项 342
19.1.2 远程线程技术 344
19.1.3 实例:使用远程线程实现模块注入 345
19.1.4 异步过程调用(APC) 346
19.1.5 实例:使用APC实现模块注入 347
19.2 挂接API 349
19.2.1 重定向API 350
19.2.2 实例:重定向API MessageBoxA示例 350
19.2.3 古老的API HOOK 353
19.2.4 实例:HOOK API示例 354
19.2.5 Detours Hook 356
19.2.6 实例:使用detour库实现挂接API示例 357
19.3 钩子 359
19.3.1 钩子的基本原理 359
19.3.2 钩子类型 360
19.3.3 实例:全局鼠标钩子示例 366
19.3.4 实例:全局键盘钩子示例 369
19.3.5 实例:使用局部CBT钩子示例 370
19.3.6 实例:使用低级键盘钩子示例 371
19.4 反注入技术 372
19.4.1 实例:使用调试钩子屏蔽全局钩子 372
19.4.2 实例:检测注入模块 374
19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377
19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379
附录 光盘源码实例 381
0 评论:
发表评论