第1章 第一个C语言程序 1
1.1 C语言的背景与历史 1
1.2 C语言特点 1
1.3 使用Visual C++ 2005编写第一个C语言程序 2
1.4 C语言的基本概念 4
1.4.1 关键字 4
1.4.2 控制语句 5
1.4.3 变量 5
1.4.4 常量 6
1.4.5 函数 8
1.4.6 素数的判断 9
1.5 C语言的指针、数组、结构、联合与枚举 10
1.5.1 指针 10
1.5.2 数组 12
1.5.3 结构 14
1.5.4 联合 15
1.5.5 枚举 17
1.6 总结:C语言的编程风格与学习方法 19
习题1 20
第2章 第一个C++程序 21
2.1 C++概述 21
2.2 C++发展历史 21
2.3 C和C++的关系 21
2.4 第一个C++程序 22
2.5 C++对C的扩充 24
2.5.1 C++的输入输出 24
2.5.2 字符串变量 25
2.5.3 有默认参数的函数 25
2.5.4 动态分配/撤销内存的运算符new和delete 26
2.5.5 内联函数 27
2.5.6 函数的重载 27
2.5.7 函数模板 28
2.6 C++中的面向对象机制 30
2.6.1 类与结构 30
2.6.2 类 31
2.6.3 类的构造函数与析构函数 33
2.7 改造monitor类 36
2.8 C++小结 38
习题2 39
第3章 创建Win32 API应用程序 40
3.1 Windows编程基础 40
3.1.1 什么是Win32 40
3.1.2 什么是Windows API函数和Win32 API 40
3.1.3 什么是SDK 40
3.1.4 窗口与句柄 41
3.1.5 ANSI编码与Unicode编码 41
3.2 利用Windows API函数编写一个消息框 41
3.3 消息框的实现详解 42
3.3.1 Windows.h头文件 42
3.3.2 域操作符:: 43
3.3.3 MessageBox函数 44
3.3.4 通过MSDN学习API函数 44
3.3.5 常用的Windows数据类型 45
3.3.6 API函数参数的选择 46
习题3 48
第4章 编写第一个MFC窗口程序 49
4.1 窗口 49
4.1.1 三种窗口类型 49
4.1.2 客户区和非客户区 49
4.1.3 什么是MFC 50
4.2 编写第一个MFC窗口程序 50
4.2.1 建立一个单文档的程序 50
4.2.2 MFC AppWizard产生的程序分析 53
4.2.3 MFC的基类CObject 54
4.2.4 字符串类CString 55
4.3 利用设备上下文实现显示输出 58
4.3.1 什么是设备上下文 58
4.3.2 CDC类与资源泄漏 58
4.4 Windows消息机制 60
4.4.1 消息的组成 60
4.4.2 消息的处理 60
4.4.3 消息传递机制 61
4.4.4 编写响应鼠标单击的窗口程序 61
4.4.5 消息映射机制的实现 63
4.4.6 客户区的重绘 64
4.5 Win32函数和MFC函数的差别 65
习题4 66
第5章 窗口绘图 67
5.1 绘图相关知识与应用 67
5.1.1 Windows窗口绘图的坐标系统 67
5.1.2 与绘图相关的几个几何对象的类 67
5.1.3 创建一个绘图程序 68
5.2 Windows绘图的类与函数 81
5.2.1 CDC类 81
5.2.2 CPen类 83
5.2.3 CBrush类 84
5.2.4 绘图模式 85
5.2.5 Invalidate函数 86
习题5 86
第6章 对话框 88
6.1 什么是对话框 88
6.2 对话框的分类 88
6.3 如何设计对话框 88
6.3.1 设计对话框模版 89
6.3.2 对话框类的设计 90
6.4 对话框的数据交换机制(DDX) 96
6.5 模态对话框和非模态对话框 96
6.6 对话框实例 97
习题6 102
第7章 鼠标键盘定时器 103
7.1 鼠标键盘定时器的相关事件及编程例子 103
7.1.1 如何对鼠标事件编程 103
7.1.2 如何对键盘事件编程 103
7.1.3 如何对定时器编程 103
7.1.4 创建鼠标键盘定时器应用程序 104
7.2 键盘鼠标的事件及编码 113
7.2.1 Windows中的键盘事件 113
7.2.2 扫描码和虚拟键码 113
7.2.3 鼠标事件 115
7.3 定时器的使用 116
7.3.1 如何创建定时器 116
7.3.2 取消定时器 118
习题7 118
第8章 菜单、工具栏、快捷键 119
8.1 菜单 119
8.1.1 什么是菜单 119
8.1.2 建立菜单 119
8.2 工具栏 128
8.2.1 工具栏的作用 128
8.2.2 建立工具栏 128
8.3 快捷键 129
8.3.1 什么是快捷键 129
8.3.2 添加快捷键 130
8.4 菜单、工具栏和快捷键相关知识 132
8.4.1 菜单的消息与函数 132
8.4.2 工具栏的属性与函数 136
8.4.3 快捷键的相关属性 136
习题8 138
第9章 文档、视图、框架窗口 139
9.1 文档—视图结构 139
9.1.1 什么是文档—视图模型 139
9.1.2 什么是SDI和MDI 139
9.1.3 什么是文档模板 140
9.2 文档与视图的联系 140
9.3 文档/视图架构中消息流动机制 143
9.4 持久性和序列化 146
9.4.1 什么是持久性 146
9.4.2 什么是序列化 146
9.4.3 文档的存盘和读取 146
9.4.4 OnDraw(CDC*/*pDC*/)简介 151
9.4.5 保存时自定义后缀的实现 151
9.4.6 使类具备序列化功能 152
习题9 153
第10章 控件 154
10.1 控件的分类 154
10.2 控件的共性 154
10.2.1 所有的控件都是子窗口 154
10.2.2 控件的创建方法 155
10.2.3 手工创建控件 155
10.2.4 控件的访问方法 157
10.2.5 控件及控件对象的删除 159
10.3 MFC通用控件的实例 159
10.3.1 列表控件(CListCtrl) 159
10.3.2 树控件(CTreeCtrl) 161
10.4 列表控件和树控件举例 163
10.5 设计新的控件类 166
习题10 166
第11章 位图 167
11.1 位图编程基础 167
11.1.1 什么是位图 167
11.1.2 调色板 168
11.1.3 调色板管理器机制 168
11.1.4 DDB和DIB 169
11.1.5 位图文件结构 169
11.2 将客户区图像保存为位图文件 171
11.2.1 将位图显示在客户区中 171
11.2.2 CreateCompatibleDC函数与BitBlt函数 173
11.2.3 将位图显示在客户区中 174
11.3 软件背景图和空心字的显示 180
11.3.1 软件背景图的拉伸显示 180
11.3.2 StretchBlt和SetStretchBltMode函数 181
11.3.3 空心字的显示 182
11.3.4 路径函数BeginPath和EndPath 184
习题11 185
第12章 打印 186
12.1 打印编程基础 186
12.1.1 显示分辨率 186
12.1.2 打印分辨率 186
12.1.3 映射模式 187
12.1.4 视口和窗口 187
12.1.5 需要重载的CView类成员函数 188
12.2 编写一个所见即所得的程序 189
12.3 打印详解 193
12.3.1 设置打印机状态 193
12.3.2 通过CView打印 193
12.4 编写一个基于对话框的打印程序 196
12.4.1 打印的实现 196
12.4.2 打印对话框 199
12.4.3 DrawText函数 199
12.4.4 StartDoc函数和EndDoc函数 200
12.4.5 inflaterect函数和deflaterect函数 201
习题12 201
第13章 ActiveX控件 202
13.1 ActiveX简介与开发 202
13.1.1 ActiveX简介 202
13.1.2 创建一个ActiveX控件 203
13.1.3 Visual C++ 2005中使用ActiveX控件 215
13.2 ActiveX控件详解 220
13.2.1 不需要注册ActiveX控件 220
13.2.2 ActiveX控件测试容器 220
13.3.3 MFC ActiveX的属性、方法、事件 220
习题13 221
第14章 动态链接库 222
14.1 动态链接库基础 222
14.1.1 什么是动态链接库 222
14.1.2 静态链接和动态链接 222
14.1.3 使用动态链接库的好处 223
14.1.4 应用程序和动态链接库的区别 223
14.2 动态链接库的封装和加载 223
14.2.1 动态链接库的封装 223
14.2.2 Dumpbin工具查看DLL的导出函数 224
14.2.3 从DLL导出函数 226
14.2.4 动态链接库的隐式加载 227
14.2.5 动态链接库的显式加载 229
14.2.6 易犯的名字改编错误 230
14.2.7 什么是DLL劫持 231
14.3 MFC DLL简介 231
习题14 233
第15章 进程、线程 234
15.1 进程与线程 234
15.1.1 什么是进程与线程 234
15.1.2 为什么要使用多线程 234
15.1.3 如何创建和结束进程 235
15.1.4 如何创建和结束线程 235
15.1.5 进程线程实例 236
15.2 进程与线程相关方法 245
15.2.1 如何使用CreateProcess()创建进程 245
15.2.2 如何使用ExitProcess()结束进程 246
15.2.3 如何使用TerminateProcess()结束进程 246
15.2.4 如何使用AfxBeginThread()创建线程 247
15.2.5 如何使用AfxEndThread()结束线程 248
15.2.6 如何使用TerminateThread()结束线程 248
习题15 248
第16章 注册表 249
16.1 注册表知识 249
16.1.1 什么是注册表 249
16.1.2 什么是INI文件 249
16.1.3 注册表的层次结构 250
16.2 编写程序启动自运行实例 251
16.3 编程操作注册表 253
16.3.1 注册表启动项 253
16.3.2 操作注册表的API函数 254
16.3.3 路径分解函数_wsplitpath 255
16.4 宽字符编程中易犯的错误 255
习题16 258
第17章 系统管理 259
17.1 系统信息的获取与显示 259
17.1.1 如何获取各种系统信息 259
17.1.2 如何获取系统进程信息 259
17.1.3 如何获取内存使用情况 259
17.1.4 如何获取系统驱动器信息 259
17.1.5 如何获取系统设备信息 260
17.1.6 创建系统管理应用程序 260
17.2 系统信息相关函数的使用 276
17.2.1 进程相关的几个函数是如何使用的 276
17.2.2 如何获取系统物理内存与虚拟内存的使用情况 279
17.2.3 获取系统驱动器信息的几个函数是如何使用的 279
17.2.4 获取系统设备的几个函数是如何使用的 281
习题17 283
第18章 网络通信 284
18.1 socket编程 284
18.1.1 什么是socket 284
18.1.2 socket编程步骤 284
18.1.3 创建聊天系统的服务器端 285
18.1.4 创建聊天程序的客户端 296
18.2 网络编程中socket的使用 309
18.2.1 如何使用socket相关的函数 309
18.2.2 SOCK_DGRAM类型的套接字如何使用 312
18.2.3 为什么本章例子程序中多次使用线程 312
习题18 312
第19章 数据库编程 313
19.1 ADO简介 313
19.1.1 ODBC与ADO 313
19.1.2 使用ADO的基本流程 313
19.1.3 如何引入和初始化ADO的COM库 313
19.1.4 ADO提供了什么接口 314
19.1.5 使用ADO操作数据库 315
19.2 ADO对象与方法详解 332
19.2.1 关于数据类型转换(_bstr_t和CString) 332
19.2.2 使用ADO连接数据库 332
19.2.3 执行不返回结果的SQL命令 333
19.2.4 执行SQL命令获取记录集 334
习题19 335
第20章 水晶报表 337
20.1 为何使用报表工具 337
20.2 什么是水晶报表 337
20.2.1 安装水晶报表 338
20.2.2 Crystal Repots for Visual Studio 2005 338
20.3 水晶报表使用实例 338
20.4 在MFC中使用水晶报表 343
习题20 344
第21章 Office编程 345
21.1 如何进行Office编程 345
21.1.1 Office的基本编程模型——对象 345
21.1.2 Excel编程模型中的对象 345
21.1.3 在Visual C++ 2005中操作Excel对象 346
21.1.4 Excel编程实例 347
21.2 Excel编程中方法与参数的详解 356
21.2.1 打开一个Workbook的open方法 356
21.2.2 保存Excel文档的SaveAs方法 358
21.2.3 设置字体或单元格等颜色的ColorIndex参数 359
习题21 360
第22章 多媒体编程 361
22.1 Windows平台下的多媒体编程 361
22.2 Windows下的屏幕保护程序 361
22.3 制作一个简单的屏幕保护程序 362
22.4 屏保程序的调用机制 365
习题22 366