序篇 Visual C++ 6.0简介 1
1. Visual C++ 6.0新特性 2
1.1 对编译器的改进 2
1.2 对AppWiard的改进 2
1.3 更完善的MFC 3
1.4 数据库应用程序的增强支持 3
1.5 相对于Visual C++ 5.0的新特性 3
2.1 Microsoft Developer Studio 4
2.2 Visual C++ 6.0编程工具 4
2. Visual C++ 6.0开发环境简介 4
2.3 OLE服务器 5
2.4 MFC类库 5
2.5 Visual C++ 6.0的帮助系统 5
2.6 Visual C++ 6.0附带工具简介 5
3. 如何学习使用Visual C++ 6.0 5
第一章 建立一个AppWizard程序 7
1.1 什么是AppWizard? 7
1.2 迎接你的第一个AppWizard程序 8
1.2.1 第一步 9
1.2.2 第二步 10
1.2.3 第三步 11
1.2.4 第四步 13
1.2.5 第五步 14
1.2.6 第六步 14
1.3 “I am a programmer”在哪儿? 17
第二章 学习简化的程序框架 20
2.1 一个简化过的程序框架 20
2.2 WinMain( ):第一个动作 22
2.3 登记窗口类 24
2.4 创建一个窗口 26
2.5 显示窗口 28
2.6 显示消息 28
2.6.1 改写源程序 28
2.6.2 编译、链接并运行该程序 32
2.6.3 与DOS或UNIX等价程序的比较 34
2.7 窗口类与窗口对象 35
2.7.1 窗口对象 35
2.7.2 CWnd派生的窗口类 35
2.7.5 销毁窗口 36
2.7.3 注册窗口类 36
2.7.4 窗口的创建过程 36
第三章 消息循环 37
3.1 处理消息循环 37
3.1.1 程序设计中的基础事件 38
3.1.2 “I am a programmer”的消息循环 39
3.2 对事件做出响应:WindowFun( ) 41
3.3 响应不同的消息 41
3.3.1 用WM_PAINT消息跟踪屏幕 42
3.4 设备界面进行交互 46
3.3.2 WM_DESTROY消息 46
3.4.1 HDC 47
3.4.2 其它可返回设备上下文的函数 53
第四章 了解真正的程序框架 54
4.1 WinMain()函数 54
4.2 应用程序框架和源文件 59
4.2.1 文档类 59
4.2.2 视图类 64
4.2.3 主边框窗口类 69
4.2.4 子边框窗口类 74
4.2.5 应用程序类 77
4.3 工具条、状态条和打印等选项 97
4.3.1 工具条和状态条 97
4.3.2 打印选项 98
4.3.3 加入MDI支持 100
4.4 程序的控制流程 101
4.4.1 成员函数InitInstance 102
4.4.4 成员函数OnIdle 104
4.4.5 CWinApp的专门服务 104
4.4.3 成员函数ExitInstance 104
4.4.2 成员函数Run 104
第五章 熟悉Visual C++ 6.0的编程环境 106
5.1 Visual C++ 6.0主窗口 106
5.2 Visual C++ 6.0工具栏 107
5.3 Visual C++ 6.0菜单栏 108
5.3.1 “File” 菜单 108
5.3.2 “Edit” 菜单 114
5.3.3 “View” 菜单 117
5.3.4 “Insert” 菜单 120
5.3.5 “Project” 菜单 121
5.3.6 “Build” 菜单 123
5.3.7 “Debug” 菜单 126
5.3.8 “Tools” 菜单 128
5.3.9 “Window” 菜单 131
5.3.10 “Help” 菜单 132
5.4 项目与项目工作区 133
5.5 资源与资源编辑器 135
5.5.1 资源编辑器 136
5.5.2 资源符号 137
5.5.3 资源符号浏览器 138
5.5.4 对话编辑器 138
5.5.5 菜单编辑器 142
5.5.6 加速键编辑器 145
5.5.7 串编辑器 147
5.5.8 版本信息编辑器 148
5.5.9 图形编辑器 149
5.5.10 工具栏编辑器 152
6.1.1 消息映射(Message Maps) 选项卡 154
6.1 使用ClassWizard添加消息处理函数 154
第六章 ClassWizard编程 154
6.1.2 成员变量(Member Varibles)选项卡 156
6.1.3 自动化(Automation)选项卡 157
6.1.4 ActiveX事件(ActiveX Events)选项卡 159
6.1.5 类信息(Class Info)选项卡 159
6.2 ClassWizard功能介绍 161
6.3 传送鼠标消息 164
6.3.1 Windows系统最重要的事件:鼠标的移动 165
6.3.2 用鼠标绘图 171
6.3.3 鼠标绘图:改进型 177
6.4 保存鼠标绘图的信息 183
6.4.1 保存屏幕MyProg2d 183
6.4.2 修改绘图程序:MyProg2d 193
6.4.3 测试和评价 200
6.4.4 临近尾声 201
第七章 视图与文档 210
7.1 Document-View模式 210
7.1.1 为何要分成两类? 210
7.2.1 文档 211
7.1.2 Documet-View模式的MFC版本 211
7.2 从视图中分离出文档 211
7.2.2 视图 218
7.2.3 运行程序 225
7.3 保存文档 225
7.3.1 将Serialize( )补充完整 226
7.3.2 检验结果 229
7.3.3 注册一个文件类型 230
7.3.4 关于“no update” 230
7.4 再访MyProg2.cpp 231
7.4.1 什么是.INI文件 236
7.4.2 下一步怎么办? 237
第八章 图形设备接口 239
8.1 设备环境类 239
8.1.1 显示设备环境类CClientDC和 CWindowDC 240
8.1.2 构造和析构CDC对象 240
8.1.3 设备环境的状态 241
8.1.4 CPaint DC类 241
8.2.2 跟踪GCI对象 242
8.2.1 GDI对象的构造与析构 242
8.2 GDI对象 242
8.2.3 库存的GDI对象 243
8.2.4 GDI选择的有效期 244
8.2.5 持久的用于显示的设备环境——登记窗口类 245
8.3 Windows的颜色映射 245
8.3.1 标准视频图形矩阵(VGA)显示卡 246
8.3.2 256色显示卡 247
8.3.3 24位颜色显示卡 247
8.4.1 MM_TEXT映射方式 248
8.4 映射方式 248
8.4.2 “固定比例”的映射方式 249
8.4.3 坐标变换 250
8.5 字体 252
8.5.1 字体是GDI对象 252
8.5.2 选择字体 252
8.5.4 显示字体 252
8.5.5 窗口中的点——逻辑Twips 253
8.5.6 计算字符高度 253
8.6 MYPROG3例程序 254
8.7 MyProg3B程序 262
8.8 MYPROG3C例程序:使用CScrollView 266
8.8.1 MYPROG3C程序的一些元素 270
8.8.2 CScrollView的SetScaleToFitSize状态 271
第九章 对象连接与嵌入(OLE)及其自动化 272
9.1 公共对象模式(COM) 272
9.1.1 COM解决的问题 272
9.1.2 COM的实质 273
9.1.3 什么是COM接口 273
9.1.4 IUnknown接口和QueryInterface成员函数 278
9.1.5 引用计数:AddRef和Release函数 281
9.2 类厂(class factory) 281
9.2.1 COM和MFC——CCmdTarget类 283
9.2.2 OLE和窗口登记数据库 284
9.2.3 运行时刻对象登记 285
9.2.4 COM客户程序是如何调用DLL侍者程序的 285
9.2.5 COM客户程序是如何调用EXE侍者程序的 287
9.3 OLE自动化 289
9.3.1 C++与Visual Basic for Application(VBA)之间的连接 289
9.2.7 包容和继承 289
9.2.6 MFC和OLE 289
9.3.2 自动化控制程序和自动化侍者程序 290
9.3.3 属性(property)、方法(method)和集合(collection) 290
9.3.4 OLE自动化所解决的问题 291
9.4 IDispatch接口 291
9.4.1 OLD自动化程序设计 292
9.4.2 MFC IDispatch的实现 293
9.4.3 一个MFC OLE自动化侍者 293
9.4.4 一个MFC OLE自动化控制程序 294
9.4.5 VARIANT类型 296
9.4.6 CVariant类 298
9.4.7 InvoDce的参数和返回值的类型转换 301
第十章 动态连接库(DLLs) 303
10.1 为什么使用DLL 303
10.2 传统的DLL 303
10.3 MFC库DLL 304
10.3.1 MFC库DLL的使用仅限于Microsoft C++编译器 304
10.3.2 作为DLL的MFC库类 305
10.3.3 在应用中使用MFC250D.DLL 305
10.3.6 扩展DLL需要的一些代码 306
10.3.4 MFC库扩展DLL 306
10.3.5 MFC库DLL内存使用 306
10.3.7 搜索资源 307
10.3.8 内联构造函数 308
10.3.9 扩展DLL的引出 308
10.3.10 类静态数据成员 309
10.3.13 创建引入库 310
10.3.14 DLL的调试版和发行版 310
10.3.12 创建DLL 310
10.3.11 扩展DLL运行时刻类的确定 310
10.4 MyProg4A:编写自己的类库扩展DLL 311
10.4.1 MyProg4AD.DEF文件 311
10.4.2 MyProg4AD工程的Visual工作平台选项 313
10.4.3 创建引入库并拷贝DLL 314
10.5 MyProg4B:使用MFC库扩展DLL 314
10.5.1 CMyProg4bApp 315
10.5.2 CMyProg4bDoc 315
10.5.3 CMyProg4bView 315
10.6 创建并测试MyProg4B程序 317
10.5.4 CStudentDialog 317
10.7 资源访问 318
第十一章 对话框 320
11.1 在状态条上显示对话控件的帮助信息 320
11.1.1 问题的提出 320
11.1.2 实现技术 320
11.1.3 实现步骤 320
11.1.4 实现内幕 324
11.2.2 实现技术 325
11.2.3 实现步骤 325
11.2.1 问题的提出 325
11.2 利用FileOpen通用对话框打开多个文件 325
11.2.4 实现内幕 329
11.3 定制通用文件对话框 331
11.3.1 问题的提出 331
11.3.2 实现技术 331
11.3.3 实现步骤 332
11.3.4 实现内幕 336
11.4.2 实现技术 337
11.4.1 问题的提出 337
11.4 扩展和缩减一个对话框 337
11.4.3 实现步骤 338
11.4.4 实现内幕 341
11.5 显示一个模式或无模式对话框 342
11.5.1 问题的提出 342
11.5.2 实现技求 342
11.5.3 实现步骤 343
11.5.4 实现内幕 349
11.6.2 实现技术 350
11.6.1 问题的提出 350
11.6 编写定制的DDX/DDV例程 350
11.6.3 实现步骤 351
11.6.4 实现内幕 356
第十二章 剖析工具Spy++ 359
12.1 窗体 360
12.1.1 查看窗体 360
12.1.2 查看窗体详细信息 360
12.1.3 定位窗体 362
12.2 消息 363
12.2.2 “Messages” 选项卡 364
12.2.1 “Windows”选项卡 364
12.2.3 “Output” 选项卡 365
12.3 进程与线程 367
附录A Visural C++ 6.0的安装说明 370
附录B 走进C++的世界 378
B.1 类和对象的简介 378
B.1.1 C中用户自定义类型 378
B.1.2 转向C++ 379
B.1.3 构造函数 380
B.1.4 析构函数 382
B.1.5 其它的成员函数 384
B.1.6 private和public型类成员 384
B.1.7 帮助函数 385
B.1.8 对C++封装的简要说明 386
B.2 继承和多态性:一个具体的例子 386
B.2.1 轨道物体的基类和虚函数 386
B.2.2 纯虚函数 388
B.2.3 派生类 388
B.3.1 拷贝构造函数 390
B.2.4 在基类中所调用的虚函数 390
B.3 内嵌对象 390
B.3.2 赋值运算符 391
B.B.3 C++引用:提高效率 393
B.3.4 内嵌对象创建的总结 396
B.3.5 内嵌对象的析构 397
B.4 在堆中申请对象 397
B.4.1 C++的new和delete运算符 397
B.4.2 通过指针来引用对象 398
B.4.3 虚析构函数 399
B.5 全程对象的申请 400
B.6 对象之间的相互关系:指针数据成员 401
B.7 this指针的使用 402
B.8 对指针的引用 403
B.9 友元类和友元函数 404
B.9.1 友元类 404
B.9.2 全程友元函数 405
B.10 静态类成员 406
B.10.1 静态数据成员 406
B.10.3 静态成员函数 407
B.10.2 枚举类型——实现静态数据成员的捷径 407
B.11.1 成员函数运算符 409
B.11 重载运算符 409
B.11.2 转换运算符 411
B.11.3 辅助运算符(helper operator) 412
B.12 从代码中分离出类定义 413
附录C 匈牙利表示法 416
D.1 TRACE 418
D.1.1 几种模式 418
附录D 代码调试 418
D.1.2 使用TRACE 419
D.2 调试框架 420
D.2.1 AssertValid( ) 423
D.2.2 防御型的编程方式 424
D.2.3 关于Dump( ) 425
D.3 自我诊断 425
D.4 调试代码的作用 432
D.5 用Dum( )显示对象的信息 433
D.6 检查内存 435