VC++深入详解(第3版)(基于Visual Studio 2017)
  • 推荐0
  • 收藏0
  • 浏览145

VC++深入详解(第3版)(基于Visual Studio 2017)

孙鑫 (作者)  黄爱萍 (责任编辑)

  • 丛  书:孙鑫精品图书系列
  • 书  号:ISBN 978-7-121-36221-7
  • 出版日期:2019-06-01
  • 页  数:748
  • 开  本:16(185*260)
  • 出版状态:正在印刷
  • 维护人:高洪霞

相关图书

Java编程方法论:响应式RxJava与代码设计实战

知秋(李飞) 李飞 (作者)

本书对RxJava 2的源码进行了深入解读,让读者可以从设计到实现细节上全面了解它,从而达到不仅会用而且可以进行RxJava 2源码库组件级别的拓展的程度。本书...

 

Servlet/JSP深入详解——基于Tomcat的Web开发(畅销书升级版)

孙鑫 (作者)

本书共分3篇,分别为Servlet篇、JSP篇及其应用篇,书中展示了Java Web开发中各种技术的应用,帮助读者快速掌握Java Web开发。 在知识的讲解...

 

Python接口自动化测试

王浩然 (作者)

本书主要介绍如何用Python实现接口自动化测试。全书主要内容包括接口基础、接口手工测试、编程前的准备、用Python处理MySQL数据库、用Python发送H...

¥59.00

Service Mesh实战:用Istio软负载实现服务网格

周遥 (作者)

本书为网格服务技术的实战详解图书。作者以初学者角度展示软负载在分布式架构中承担的角色,引入容器时代主角 Kubernetes;再从路由层面全面展开对 Servi...

 

人人都懂设计模式:从生活中领悟设计模式(Python实现)

罗伟富 (作者)

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、无数工程师实践的代码设计经验的总结,它是面向对象思想的高度提炼和模板化。使用设计模式将会...

 

深入浅出Prometheus:原理、应用、源码与拓展详解

陈晓宇 杨川胡 陈啸 (作者)

本书主要围绕prometheus设计、架构、使用以及源码分析等多个角度全面阐述prometheus的内部原理和设计思想,本书第一部分主要围绕监控系统设计以及pr...

 
本书在内容的组织上循序渐进、由浅入深;在知识的介绍上,从内到外、从原理到实践。
第1章首先为读者介绍了Visual Studio 2017的安装和使用,以及离线MSDN的安装。第2章帮助读者掌握Windows平台下程序运行的内部机制。第3章帮助读者复习C++中的重要知识,为后续知识的学习打下良好的基础。第4章重点剖析MFC框架程序的运行脉络,并与第2章的知识做对照,为读者彻底扫清学习MFC的迷雾。相信通过这一章的学习,很多以前学过MFC的读者都会有一种恍然大悟的感觉。前四章可以归为基础部分,从第5章开始就是实际应用开发的讲解了,包括绘图、文本、菜单、对话框、定制程序外观、图形保存和重绘、文件和注册表操作、网络编程、多线程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题,并且每一章都有一个完整的例子。
本书的讲解理论结合实际,选用的例子和代码非常具有代表性和实用价值,我和我的学员在实际开发项目的过程中就曾经直接使用过很多书中的代码。
以实际应用为主,贯穿编程思想和技巧,在知识的讲解上,理论结合实际,深入剖析了程序运行的原理,对于每一个知识点,都清楚地讲解了为什么,而不是简单地告诉读者怎么用。
孙鑫,国内著名的IT技术和教育专家,2009中国教育杰出人物,程序员之家网站站长(www.phome.asia/www.sunxin.org)。具有20多年的软件开发和教育培训经验,精通多种程序语言和技术架构,曾主讲过的课程包括C/C++、VC++、COM/DCOM/COM+、SQL Server、Oracle、Java、J2EE、Struts/Struts 2、Hibernate、iBatis、Spring、数据库建模等。2004年曾推出《Java无难事》和《VC++深入编程》教学视频,获得了强烈反响,在网络上掀起了一股视频教学的风潮,数十万的学员通过这两套视频走上了软件开发的道路。从2006年开始,相继出版了畅销技术专著:《Java Web开发详解》、《VC++深入详解》、《Struts 2深入详解》、《Servlet/JSP深入详解》、《XML、XML Schema、XSLT 2.0和XQuery开发详解》、《HTML5、CSS和JavaScript开发》等。
前 言
本书第1版《VC++深入详解》,从2004年面市,至今已有15年之久,作为一本技术图书,《VC++深入详解》的生命力让我惊叹,时至今日,该书仍畅销不衰。15年时光,可以让一个幼童成长为成人,可以让一个初涉软件开发领域的编程新手成长为公司的CTO。15年内,我见证了很多程序爱好者通过阅读本书进入软件开发岗位。在给企业做培训时,经常有企业同行告诉我他是看着我的图书和视频成长的,这让我感到莫大的欣慰。
15年中,Visual C++ 6.0已经逐渐被Visual Studio开发环境所替代,本书的编辑、读者都希望我能够将本书进行改版,以适应当前最新的Visual Studio开发环境,然而由于我个人的原因,迟迟没有将本书从Visual C++ 6.0升级到Visual Studio。不过,迟到的改版终于来了,本书以最新的Visual Studio 2017作为开发环境,将之前适用于Visual C++ 6.0的代码全部进行了升级,并修订了书中和代码中的一些疏漏。
本书自第1版面市,很多读者就给予了本书极高的评价,将之与《深入浅出MFC》相提并论,甚至将我和侯捷老师等同,这让我诚惶诚恐。从技术角度上来说,我和侯捷老师相差甚远,从图书角度上来讲,本书对MFC的阐述部分仅仅是让读者快速入门,能快速应用于开发,深入理解MFC框架的各种原理和设计思想,读者还需要进一步参阅《深入浅出MFC》。读者一定要正确地对待本书,切不可因本书而产生C++编程不过如此的念头,那样实非此书之福,也非读者之福。
C++编程领域浩瀚博大,本书只是把读者领入了Windows平台下Visual C++开发的道路,前方的路还很远很长,衷心希望读者能够继续学习,继续成长,终有一天成长为C++领域的编程高手。
本书读者对象
本书读者群包括:
 掌握了C语言,想进一步学习Windows编程的读者。
 学习VC++多年,但始终没有真正入门的读者。
 正在从事VC++开发的初级程序员。
 有一定VC++开发经验,想要系统地学习VC++的读者。
本书的内容组织
本书在内容的组织上循序渐进、由浅入深;在知识的介绍上,从内到外、从原理到实践。
第1章首先为读者介绍了Visual Studio 2017的安装和使用,以及离线MSDN的安装。第2章帮助读者掌握Windows平台下程序运行的内部机制。第3章帮助读者复习C++中的重要知识,为后续知识的学习打下良好的基础。第4章重点剖析MFC框架程序的运行脉络,并与第2章的知识做对照,为读者彻底扫清学习MFC的迷雾。相信通过这一章的学习,很多以前学过MFC的读者都会有一种恍然大悟的感觉。前四章可以归为基础部分,从第5章开始就是实际应用开发的讲解了,包括绘图、文本、菜单、对话框、定制程序外观、图形保存和重绘、文件和注册表操作、网络编程、多线程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题,并且每一章都有一个完整的例子。
本书的讲解理论结合实际,选用的例子和代码非常具有代表性和实用价值,我和我的学员在实际开发项目的过程中就曾经直接使用过很多书中的代码。
本书的实例程序
在编写本书时,使用的操作系统是Windows 8.1专业版,开发工具是Visual Studio 2017,CPU是双核四线程。本书所有的实例程序在该环境中都运行正常。
提示:由于一些网络软件使用的端口可能与本书例子中的网络程序使用的端口冲突,在运行本书例子中的网络程序时,如果出错,请更换程序中的端口号,或者关闭引起冲突的网络软件后再运行书中的程序。
学习建议
我曾经发布过一套Visual C++ 6.0编程开发的视频,视频中的内容与书中的内容大体是一致的,读者在学习本书时,可以以视频为辅,这样能够更快、更好地掌握VC++编程。本套视频可以到本书代码下载处进行下载。
在学习本书时,建议读者多动脑(想想为什么),多动手(将知识转换为自己的)。在理解的前提下,独立地编写出书中每章的例子程序,以作为是否掌握本章内容的一个考核。
本书代码下载
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
下载资源:本书如提供示例代码及资源文件,均可在“下载资源”处下载。
提交勘误:您对书中内容的修改意见可在“提交勘误”处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/36221
最后,衷心地祝愿读者能够从此书获益,从而实现自己的开发梦想。由于本书的内容较多、牵涉的技术较广,错误和疏漏之处在所难免,欢迎广大技术专家和读者指正。我的联系方式是csunxin@sina.com。

作 者
2019年6月

目录

目 录

第1章 准备开发环境 1
1.1 下载并安装Visual Studio 2017 1
1.2 运行第一个程序——
Hello World 3
1.3 安装离线MSDN 5
1.4 小结 7
第2章 Windows程序内部运行
机制 8
2.1 API与SDK 8
2.2 窗口与句柄 9
2.3 消息与消息队列 10
2.4 WinMain函数 11
2.4.1 WinMain函数的定义 12
2.4.2 窗口的创建 13
2.4.3 消息循环 20
2.4.4 编写窗口过程函数 22
2.5 动手写第一个Windows程序 26
2.6 消息循环的错误分析 30
2.7 变量的命名约定 32
2.8 小结 33
第3章 掌握C++ 34
3.1 从结构到类 34
3.1.1 结构体的定义 34
3.1.2 结构体与类 36
3.2 C++的特性 38
3.2.1 类与对象 39
3.2.2 构造函数 39
3.2.3 析构函数 42
3.2.4 函数的重载 43
3.2.5 this指针 44
3.2.6 类的继承 46
3.2.7 虚函数与多态性、纯虚函数 54
3.2.8 函数的覆盖和隐藏 58
3.2.9 引用 61
3.2.10 C++类的设计习惯及头文件
重复包含问题的解决 63
3.2.11 VC++程序编译链接的原理与过程 69
第4章 MFC框架程序剖析 71
4.1 MFC应用程序向导 71
4.2 基于MFC的程序框架剖析 74
4.2.1 MFC程序中的WinMain
函数 76
4.2.2 MFC框架窗口 87
4.2.3 消息循环 93
4.2.4 窗口过程函数 95
4.2.5 文档/视类结构 96
4.2.6 帮助对话框类 96
4.3 窗口类、窗口类对象与窗口 97
4.3.1 三者之间关系 97
4.3.2 在窗口中显示按钮 101
4.4 本章小结 108
第5章 简单绘图 109
5.1 MFC消息映射机制 109
5.1.1 类向导 110
5.1.2 消息映射机制 113
5.2 绘制线条 118
5.2.1 利用SDK全局函数实现
画线功能 119
5.2.2 利用MFC的CDC类实现
画线功能 120
5.2.3 利用MFC的CClientDC类
实现画线功能 121

5.2.4 利用MFC的CWindowDC类
实现画线功能 123
5.2.5 在桌面窗口中画线 124
5.2.6 绘制彩色线条 125
5.3 使用画刷绘图 127
5.3.1 简单画刷 127
5.3.2 位图画刷 128
5.3.3 透明画刷 131
5.4 绘制连续线条 136
5.5 绘制扇形效果的线条 138
5.6 本章小结 140
第6章 文本编程 141
6.1 插入符 141
6.1.1 创建文本插入符 141
6.1.2 创建图形插入符 145
6.2 窗口重绘 146
6.2.1 OnDraw函数 147
6.2.2 添加字符串资源 149
6.3 路径 151
6.4 字符输入 155
6.4.1 设置字体 160
6.4.2 字幕变色功能的实现 162
6.5 本章小结 167
第7章 菜单 168
7.1 菜单命令响应函数 168
7.2 菜单命令的路由 171
7.2.1 程序类对菜单命令的响应
顺序 171
7.2.2 Windows消息的分类 172
7.2.3 菜单命令路由的过程 172
7.3 基本菜单操作 174
7.3.1 标记菜单 175
7.3.2 默认菜单项 177
7.3.3 图形标记菜单 179
7.3.4 禁用菜单项 182
7.3.5 移除和装载菜单 185
7.3.6 MFC菜单命令更新机制 188
7.3.7 快捷菜单 192
7.4 动态菜单操作 195
7.4.1 添加菜单项目 195
7.4.2 插入菜单项目 197
7.4.3 删除菜单 200
7.4.4 动态添加的菜单项的
命令响应 200
7.5 电话本示例程序 202
7.5.1 动态添加子菜单的实现 203
7.5.2 显示输入的字符 205
7.5.3 添加菜单项及其命令
响应函数 207
7.5.4 框架类窗口截获菜单
命令消息 210
7.6 本章小结 217
第8章 对话框(一) 218
8.1 对话框基本知识 218
8.1.1 常用控件介绍 218
8.1.2 对话框的种类 220
8.2 对话框的创建和显示 220
8.2.1 模态对话框的创建 224
8.2.2 非模态对话框的创建 225
8.3 动态创建按钮 227
8.4 控件的访问 231
8.4.1 控件的调整 232
8.4.2 静态文本控件 233
8.4.3 编辑框控件 235
8.5 对话框伸缩功能的实现 247
8.6 输入焦点的传递 253
8.7 默认按钮的进一步说明 261
8.8 本章小结 261
第9章 对话框(二) 262
9.1 “逃跑”按钮的实现 262
9.2 属性表单和向导的创建 269
9.2.1 创建属性页 272
9.2.2 创建属性表单 277
9.2.3 向导的创建 279
9.3 本章小结 296
附录 296
第10章 定制应用程序外观 299
10.1 修改应用程序窗口的外观 299
10.1.1 在窗口创建之前修改 299
10.1.2 在窗口创建之后修改 302
10.2 修改窗口的光标、图标和
背景 304
10.2.1 在窗口创建之前修改 304
10.2.2 在窗口创建之后修改 308
10.3 模拟动画图标 310
10.3.1 加载图标资源 310
10.3.2 定时器的处理 312
10.4 工具栏编程 314
10.4.1 在工具栏上添加和删除
按钮 315
10.4.2 创建工具栏 316
10.5 状态栏编程 325
10.6 进度栏编程 332
10.6.1 在窗口中创建进度栏 332
10.6.2 在状态栏的窗格中
创建进度栏 333
10.7 在状态栏上显示鼠标
当前位置 340
10.8 本章小结 343
第11章 绘图控制 344
11.1 简单绘图 344
11.2 设置对话框 349
11.2.1 设置线宽 349
11.2.2 设置线型 353
11.3 颜色对话框 355
11.4 字体对话框 360
11.5 示例对话框 365
11.6 改变对话框和控件的背景及
文本颜色 368
11.6.1 改变整个对话框及其上
子控件的背景色 369
11.6.2 仅改变某个子控件的背景及
文本颜色 370
11.6.3 改变控件上的文本字体 373
11.6.4 改变按钮控件的背景色及
文本颜色 375
11.7 位图的显示 379
11.8 本章小结 384
第12章 图形的保存和重绘 385
12.1 坐标空间和转换 385
12.1.1 坐标空间 385
12.1.2 转换 386
12.1.3 逻辑坐标和设备坐标 390
12.2 图形的保存和重绘 392
12.2.1 集合类CPtrArray 394
12.2.2 OnPaint与OnDraw 398
12.3 窗口滚动功能的实现 400
12.3.1 CScrollView类 400
12.3.2 图形错位现象 402
12.4 元文件 407
12.4.1 元文件的使用 407
12.4.2 元文件的保存与打开 411
12.5 兼容设备描述表 413
12.6 本章小结 416
第13章 文件和注册表操作 417
13.1 const char*和char* const 417
13.1.1 const char* 417
13.1.2 char* const 418
13.2 C语言对文件操作的支持 419
13.2.1 文件的打开 419
13.2.2 文件的写入 420
13.2.3 文件的关闭 422
13.2.4 fflush函数 423
13.2.5 文件指针定位 423
13.2.6 文件的读取 424
13.2.7 二进制文件和文本文件 428
13.2.8 文本方式和二进制方式 430
13.3 C++对文件操作的支持 433
13.4 Win32 API对文件操作的
支持 435
13.4.1 文件的创建和打开 435
13.4.2 文件的写入 439
13.4.3 文件的读取 440
13.5 MFC对文件操作的支持 442
13.5.1 文件的写入 443
13.5.2 文件的读取 443
13.5.3 CFileDialog类 444
13.6 INI文件的访问 449
13.6.1 INI文件的结构 449
13.6.2 INI文件的写入 450
13.6.3 INI文件的读取 451
13.7 CWinApp的注册表读写
函数 453
13.8 注册表的编程 455
13.8.1 注册表API 455
13.8.2 注册表访问示例 462
13.9 本章小结 468
第14章 文档与串行化 469
14.1 使用CArchive类对文件进行
读写操作 469
14.2 MFC框架程序提供的文件
新建功能 472
14.2.1 IDR_MAINFRAME字符串
资源 473
14.2.2 OnNewDocument函数的
调用过程 477
14.3 文档串行化 485
14.3.1 文档类的Serialize函数 485
14.3.2 MFC框架对Serialize函数的
调用过程 487
14.4 可串行化的类 495
14.4.1 实现类对串行化的支持 495
14.4.2 利用可串行化类的Serialize
函数保存和加载对象 497
14.4.3 版本号 501
14.4.4 利用CObArray类对串行化的支持保存和加载数据 502
14.5 文档对象数据的销毁 506
14.6 本章小结 510
第15章 网络编程 511
15.1 计算机网络基本知识 511
15.1.1 IP地址 512
15.1.2 协议 512
15.1.3 网络的状况 513
15.1.4 网络异质性问题的解决 513
15.1.5 ISO/OSI七层参考模型 513
15.1.6 数据封装 516
15.1.7 TCP/IP模型 516
15.1.8 端口 517
15.1.9 套接字(socket)的引入 517
15.1.10 网络字节顺序 518
15.1.11 客户机/服务器模式 518
15.2 Windows Sockets的实现 519
15.2.1 套接字的类型 519
15.2.2 基于TCP(面向连接)的
socket编程 519
15.2.3 基于UDP(面向无连接)的socket编程 520
15.3 相关函数 520
15.3.1 WSAStartup函数 521
15.3.2 socket函数 522
15.3.3 bind函数 522
15.3.4 inet_addr和inet_ntoa
函数 523
15.3.5 inet_pton和inet_ntop
函数 524
15.3.6 listen函数 525
15.3.7 accept函数 525
15.3.8 send函数 525
15.3.9 recv函数 526
15.3.10 connect 526
15.3.11 recvfrom 526
15.3.12 sendto函数 527
15.3.13 htons和htonl函数 527
15.4 基于TCP的网络应用程序的
编写 528
15.4.1 服务器端程序 528
15.4.2 客户端程序 532
15.5 基于UDP的网络应用程序的
编写 535
15.5.1 服务器端程序 535
15.5.2 客户端程序 537
15.6 基于UDP的简单聊天程序 538
15.6.1 服务器端程序 539
15.6.2 客户端程序 542
15.7 本章小结 544
第16章 多线程 545
16.1 基本概念 545
16.1.1 进程 545
16.1.2 线程 549
16.2 线程创建函数 550
16.3 简单多线程示例 551
16.4 线程同步 555
16.4.1 火车站售票系统模拟
程序 555
16.4.2 多线程程序容易出现的
问题 557
16.4.3 利用互斥对象实现线程
同步 558
16.5 保证应用程序只有一个实例
运行 566
16.6 网络聊天室程序的实现 567
16.6.1 加载套接字库 568
16.6.2 创建并初始化套接字 569
16.6.3 实现接收端功能 570
16.6.4 实现发送端功能 575
16.7 本章小结 577
第17章 线程同步与异步套接字编程 578
17.1 事件对象 578
17.1.1 创建事件对象 578
17.1.2 设置事件对象状态 579
17.1.3 重置事件对象状态 579
17.1.4 利用事件对象实现线程
同步 579
17.1.5 保证应用程序只有一个实例
运行 586
17.2 关键代码段 586
17.2.1 相关的API函数 587
17.2.2 利用关键代码段实现线程
同步 587
17.3 线程死锁 590
17.4 互斥对象、事件对象与关键代码
段的比较 594
17.5 基于消息的异步套接字 594
17.5.1 相关函数说明 595
17.5.2 网络聊天室程序的实现 600
17.6 本章小结 610
第18章 进程间通信 611
18.1 剪贴板 611
18.1.1 数据发送 612
18.1.2 数据接收 616
18.2 匿名管道 618
18.2.1 基础知识 618
18.2.2 进程的创建 619
18.2.3 父进程的实现 624
18.2.4 子进程的实现 628
18.3 命名管道 631
18.3.1 基础知识 631
18.3.2 服务器端程序 635
18.3.3 客户端程序 640
18.4 邮槽 643
18.4.1 服务器端程序 644
18.4.2 客户端程序 645
18.5 本章小结 648

第19章 ActiveX控件 649
19.1 ActiveX控件 649
19.1.1 ActiveX控件的好处 650
19.1.2 MFC ActiveX控件向导 650
19.1.3 ActiveX控件的注册 654
19.1.4 ActiveX控件的测试 656
19.1.5 时钟控件的实现 659
19.2 属性 660
19.2.1 标准属性 661
19.2.2 自定义属性 666
19.3 方法 672
19.4 事件 674
19.4.1 标准事件 675
19.4.2 自定义事件 676
19.5 属性的持久性 679
19.6 环境属性 681
19.7 ActiveX控件测试程序 683
19.8 本章小结 686
第20章 动态链接库 688
20.1 动态链接库概述 688
20.1.1 静态库和动态库 688
20.1.2 使用动态链接库的好处 689
20.1.3 动态链接库的加载 690
20.2 DLL的创建和使用 690

20.2.1 Dumpbin命令 691
20.2.2 从DLL中导出函数 692
20.3 隐式链接方式加载DLL 693
20.3.1 利用extern声明外部
函数 694
20.3.2 Dependency Walker工具 697
20.3.3 利用_declspec(dllimport)
声明外部函数 698
20.4 完善DLL例子 699
20.5 从DLL中导出C++类 701
20.6 解决名字改编问题 704
20.7 显示加载方式加载DLL 709
20.7.1 LoadLibary函数 709
20.7.2 调用约定 711
20.7.3 根据序号访问DLL中的
导出函数 714
20.8 DllMain函数 715
20.9 MFC DLL 716
20.10 本章小结 717
第21章 HOOK编程 718
21.1 HOOK编程 718
21.1.1 基本知识 718
21.1.2 进程内钩子 720
21.1.3 全局钩子 727
21.2 本章小结 738

读者评论

同系列书