第1章 Windows程序基础 1
1.1 Windows应用程序的基本概念 1
1.1.1 窗口界面与Windows史话 1
1.1.2 API函数 3
1.2 Windows的数据类型 4
1.2.1 Windows数据类型 4
1.2.2 Windows的一个特殊数据类型——句柄 5
1.2.3 窗口类WNDCIASS 8
1.3 窗口的创建和显示 9
1.4 事件、消息循环和窗口函数 12
1.5 Windows应用程序的结构 15
1.5.1 主函数 15
1.5.2 消息的处理部分——窗口函数 17
1.5.3 Windows系统、主函数、窗口函数之间的关系 18
1.6 Windows程序代码重构 21
1.7 习题 25
第2章 Windows程序的类封装 27
2.1 应用程序主函数的C++类封装 27
2.1.1 窗口类 27
2.1.2 应用程序类 29
2.1.3 主函数封装后的程序 30
2.1.4 主函数获得应用程序类对象的问题 34
2.2 派生类的应用 36
2.2.1 应用程序类的派生类 37
2.2.2 窗口类的派生类 38
2.3 窗口函数的封装 42
2.3.1 窗口函数的简单封装 43
2.3.2 消息映射 46
2.3.3 消息映射表的声明和实现 48
2.4 习题 51
第3章 MFC应用程序框架 52
3.1 早期的应用程序框架及其MFC类 52
3.1.1 早期的应用程序框架 52
3.1.2 MFC的窗口类 53
3.1.3 CWinApp的基类CWinThread 53
3.2 最简单的MFC程序实例 54
3.2.1 程序的编写 54
3.2.2 程序主函数的代码 56
3.3 应用程序的文档/视图结构 57
3.3.1 文档/视图结构的基本概念 57
3.3.2 单文档界面和多文档界面结构 58
3.4 文档类CDocument的派生类 59
3.5 视图类CView的派生类 60
3.6 窗口框架类CFrameWnd的派生类 62
3.7 文档模板类CDocTemplate 63
3.8 应用程序类CWinApp的派生类 64
3.8.1 应用程序类派生类的代码 64
3.8.2 程序员的主要工作 66
3.8.3 应用程序各对象创建的顺序 66
3.9 类信息表及其用途 67
3.9.1 类信息表及RTTI 67
3.9.2 类信息表及对象动态创建 70
3.9.3 类信息总表及其相关宏 73
3.9.4 CObject类对RTTI的支持 76
3.9.5 利用类信息表动态创建对象 78
3.10 习题 80
第4章 MFC的常用类 81
4.1 简单数据类 81
4.1.1 点类CPoint 81
4.1.2 矩形类CRect 82
4.1.3 尺寸类CSize 83
4.1.4 字符串类CString 83
4.2 群体数据类 84
4.3 DC和GDI 85
4.3.1 图形设备描述环境 85
4.3.2 图形设备接口 85
4.3.3 MFC的绘图工具类 85
4.4 CDC类 86
4.5 绘图工具类 88
4.5.1 画笔CPen 88
4.5.2 画刷CBrush 91
4.6 文本和CFont类 93
4.6.1 显示文本 93
4.6.2 字体和CFont类 97
4.7 CDC的其他派生类 98
4.7.1 窗口用户区设备描述环境CClientDC类 98
4.7.2 图元文件设备描述环境CMetaFileDC类 99
4.8 习题 102
第5章 鼠标和键盘 104
5.1 鼠标消息及其处理 104
5.1.1 用户区鼠标消息 104
5.1.2 非用户区鼠标消息 108
5.1.3 鼠标消息的捕获 109
5.2 键盘消息及其处理 110
5.2.1 按键的虚拟码 110
5.2.2 一般按键消息 113
5.2.3 系统按键消息 114
5.3 应用程序窗口的焦点 114
5.4 习题 116
第6章 资源及控件 118
6.1 资源文件 118
6.1.1 资源头文件 118
6.1.2 资源描述文件 119
6.2 菜单的资源描述文件 120
6.2.1 资源描述文件的菜单部分 121
6.2.2 编辑现有菜单 123
6.2.3 使用可视化菜单编辑器编辑菜单 125
6.3 图标与位图 126
6.3.1 图标 126
6.3.2 位图 128
6.4 控件及其使用 131
6.4.1 控件 131
6.4.2 静态文本控件 132
6.4.3 按钮控件 133
6.4.4 编辑控件 137
6.5 对话框 139
6.5.1 对话框资源描述文件 139
6.5.2 模态对话框 141
6.5.3 控件数据与类成员数据之间的关联 145
6.5.4 以对话框为主界面的应用程序 149
6.5.5 关于应用程序的两种界面 152
6.6 习题 153
第7章 库 155
7.1 链接库 155
7.1.1 静态链接库 155
7.1.2 动态链接库 157
7.2 动态链接库的创建 160
7.2.1 导出函数的声明 160
7.2.2 用MFC编写DLL 162
7.3 动态链接库的使用 166
7.3.1 隐式链接方式 166
7.3.2 显式链接方式 166
7.4 习题 168
第8章 组件对象模型基础 169
8.1 软件的模块化 169
8.1.1 函数模块 169
8.1.2 类模块 170
8.2 带有接口的类模块 171
8.2.1 接口的必要性及其实现 171
8.2.2 类模块管理系统 173
8.3 组件对象模型 177
8.3.1 COM术语 177
8.3.2 组件类、接口的标识及注册 178
8.4 COM所规定的标准接口 179
8.4.1 接口IUnknown 179
8.4.2 接口IClassFactory和IDispatch 182
8.4.3 COM接口的二进制标准及IDL语言 183
8.5 使用ATL设计组件 184
8.5.1 ATL对COM的支持 184
8.5.2 使用ATL设计组件的步骤和方法 185
8.6 习题 187
第9章 MFC的文件处理机制 188
9.1 CFile类 188
9.2 CArchive类 189
9.2.1 CArchive类对象与CFile类对象的关联 189
9.2.2 CArchive的常用函数 190
9.3 对象序列化的基本概念 191
9.3.1 序列化概念及对象序列化的特殊性 191
9.3.2 一个序列化示例 194
9.4 MFC对象序列化机制 196
9.4.1 两个小问题的处理 196
9.4.2 序列化宏 197
9.4.3 可序列化类的声明 199
9.5 文件的扩展名 201
9.6 习题 203
第10章 .NET和C#简介 204
10.1 .NET及.NET Framework 204
10.1.1 .NET的出现 204
10.1.2 .NET概览 207
10.1.3 开发语言和开发工具 209
10.1.4 托管和非托管代码的概念 210
10.2 C#简介 212
10.2.1 C#语言的由来及其目标 212
10.2.2 C#的特点 212
10.2.3 C#的值类型和引用类型 215
10.2.4 装箱和拆箱 216
10.3 C#程序及其开发工具 218
10.3.1 一个简单的C#程序及.NET Framework SDK 218
10.3.2 C#及可视化集成开发环境Visual Studio 220
10.4 .NET的应用程序域 221
10.4.1 应用程序域的基本概念 221
10.4.2 应用程序域的创建 222
10.5 习题 224
第11章 C#语言精要 225
11.1 C#语言基础 225
11.1.1 类 225
11.1.2 类的继承 226
11.1.3 C#的多态性 228
11.2 C#对低耦合代码的支持 231
11.2.1 接口及其作用 231
11.2.2 抽象类及其作用 239
11.2.3 委托 243
11.3 C#新发展的方法成员 247
11.3.1 属性 247
11.3.2 索引指示器 250
11.3.3 事件 254
11.3.4 系统预定义事件 259
11.4 习题 261
第12章 C# Windows程序设计 263
12.1 概述 263
12.1.1 窗体和控件 263
12.1.2 开发环境生成的代码 266
12.1.3 设计时控件属性设置 272
12.1.4 菜单设计 273
12.2 图形与图像 276
12.2.1 Graphics类与图形 276
12.2.2 Graphics类与图像 279
12.2.3 图像变换 280
12.3 C#.NET程序的文档/视图结构 282
12.3.1 电子钟示例 282
12.3.2 利用事件实现文档/视图程序 287
12.4 习题 291
第13章 C#程序集 293
13.1 程序集 293
13.1.1 C#程序集的基本概念 294
13.1.2 模块 295
13.1.3 程序集的制作 297
13.1.4 使用Visual Studio创建和引用程序集 301
13.2 私有程序集及其部署 303
13.3 公有程序集及其部署 305
13.3.1 全局程序集缓存GAC 306
13.3.2 公有程序集的数字签名 306
13.3.3 公有程序集的创建 308
13.3.4 公有程序集的部署及引用 310
13.3.5 公有程序集的版本控制 313
13.4 习题 316
第14章 C#的反射机制 318
14.1 概述 318
14.2 System.Type类 320
14.2.1 System.Type类的属性 320
14.2.2 目标类的System.Type对象 320
14.3 与System.Type配套的容器类 324
14.3.1 容器类的作用 324
14.3.2 类信息的过滤和搜索 327
14.3.3 目标类对象的创建及其方法的调用 329
14.4 System.Reflection.Assembly类 333
14.4.1 Assembly对象的创建方法1 334
14.4.2 Assembly对象的创建方法2 336
14.5 Emit技术简介 336
14.5.1 概述 337
14.5.2 框架构建器类 337
14.5.3 代码的发射 340
14.6 习题 347
第15章 C#的特性 348
15.1 概述 348
15.1.1 特性的概念 348
15.1.2 特性的格式及使用规则 350
15.2 常用预定义特性 350
15.2.1 几个常用的预定义特性 351
15.2.2 用于声明序列化类的特性SerializableAttribute 353
15.3 自定义特性 357
15.3.1 Attribute类 357
15.3.2 AttributeUsageAttribute 360
15.4 习题 361
第16章 C#线程 362
16.1 线程的概念 362
16.1.1 进程 362
16.1.2 线程 364
16.2 C#的线程及其创建 365
16.2.1 System.Threading.Thread类 365
16.2.2 线程的创建 366
16.3 线程控制 368
16.3.1 问题的起源 369
16.3.2 互斥 371
16.3.3 C#的互斥实现方法 373
16.4 习题 375
附录 377
附录A 数据类型与Windows句柄 377
附录B 标识符的匈牙利记法 379
附录C MFC的消息映射 380
附录D C#的异常处理 385
附录E CSC命令集 387
附录F 窗口控件的共有属性、事件和方法 388
参考文献 394