第一部分 Windows、Visual C++和应用框架基础 3
第一章 Microsoft Windows和Visual C++ 3
1.1 Windows的编程模式 3
1.1.1 消息处理 3
1.1.2 Windows的图形设备接口(GDI) 4
1.1.3 基于资源的程序设计 4
1.1.4 内存管理 4
1.1.6 Windows NT 5
1.2 Visual C++的组成 5
1.1.5 动态连接库(DLLs) 5
1.2.1 Visual工作平台和创建过程 6
1.2.2 App Studio资源编辑器 8
1.2.3 C/C++编译器 8
1.2.4 连接器 8
1.2.5 资源编译器 9
1.2.6 调试器 9
1.2.7 AppWizard 9
1.2.8 ClassWizard 10
1.2.10 联机帮助 10
1.2.9 源程序浏览器 10
1.2.12 Microsoft基本类库2.5版 11
1.2.11 Windows诊断工具 11
第二章 Microsoft基本类库应用框架 12
2.1 为什么要使用应用框架 12
2.2.1 应用框架和MFC库 14
2.1.1 学习曲线 14
2.2 什么是应用框架 14
2.2.2 应用框架例子 15
2.3 MFC库消息映射 17
2.3.1 文档和视 18
目录 18
前言 18
3.1 什么是视 23
第三章 从“Hello,world!”入手来学习AppWizard 23
第二部分 MFC库中的视类 23
3.3 “不做任何事情”的应用 24
3.2 单文档接口(SDI)和多文档接口(MDI) 24
3.5.1 OnDraw成员函数 27
3.5 在视窗内绘图——Windows的图形设备接口 27
3.4 CEx03aView视类 27
3.5.3 往EX03A程序中加入绘制代码 28
3.5.2 Windows设备环境 28
3.6.1 EX03A.RC的内容 29
3.6 提前了解一下App Studio,同时介绍一下资源 29
3.6.2 运行App Studio 30
3.7 Windows的Debug内核和DBWIN 32
3.9 加速创建过程 34
3.8.1 允许诊断宏 34
3.8 需要使用调试器吗 34
3.10 创建新的MAK文件 39
4.1.1 消息映射 41
4.1 获取用户输入——消息映射函数 41
第四章 基本事件控制——使用ClassWizard 41
4.1.3 初始化视类数据成员 42
4.1.2 保存视的状态-类数据成员 42
4.2 EX04A例程序 43
4.1.5 Windows的用户区域 43
4.1.4 使矩形区域无效 43
4.3.1 同时使用AppWizard和ClassWizard 46
4.3 对EX04A使用ClassWizard 46
4.4 EX04B——通过鼠标来拖动圆 49
4.4.1 EX04B程序的构成元素 51
4.5 滚动视窗 53
4.5.4 EX04C滚动例程序 54
4.5.3 滚动方式的选择 54
4.5.1 窗口比人们所见到的要大 54
4.5.2 滚动条 54
4.5.5 EX04C程序中的元素 57
4.6.2 WM_CLOSE消息 58
4.6.1 WM_CREATE消息 58
4.6 其它Windows消息 58
4.6.5 WM_NCDESTROY消息 59
4.6.4 WM_DESTROY消息 59
4.6.3 WM_QUERYENDSESSION消息 59
5.1.1 显示设备环境类CClientDC和CWindowDC 60
5.1 设备环境类 60
第五章 图形设备接口(GDI) 60
5.1.2 构造和析构CDC对象 61
5.2 GDI对象 62
5.1.4 CPaintDC类 62
5.1.3 设备环境的状态 62
5.2.2 跟踪GDI对象 63
5.2.1 GDI对象的构造与析构 63
5.2.4 GDI选择的有效期 64
5.2.3 库存的GDI对象 64
5.2.5 持久的用于显示的设备环境——登记窗口类 65
5.3.1 标准视频图形矩阵(VGA)显示卡 66
5.3 Windows的颜色映射 66
5.3.2 256色显示卡 67
5.4.1 MM_TEXT映射方式 68
5.4 映射方式 68
5.3.3 24位颜色显示卡 68
5.4.2 “固定比例”的映射方式 69
5.4.3 “比例可变”的映射方式 70
5.4.4 坐标变换 71
5.5.3 打印字体 73
5.5.2 选择字体 73
5.5 字体 73
5.5.1 字体是GDI对象 73
5.5.5 窗口中的点——逻辑Twips 74
5.5.4 显示字体 74
5.5.6 计算字符高度 75
5.6 EX05A例程序 76
5.7 EX05B程序 79
5.6.1 EX05A程序的组成元素 79
5.8 EX05C例程序——再次使用CScrollView 83
5.8.2 CScrollView的SetScaleToFitSize状态 86
5.8.1 EX05C程序的一些元素 86
6.2 系统模式对话框 87
6.1 有模式和无模式对话框 87
第六章 有模式对话框 87
6.4 有模式对话框的程序设计 88
6.3 资源和控制 88
6.5 包罗万象的对话框——EX06A例程序 89
6.5.1 ClassWizard和对话框类 95
6.5.2 将对话框与视相连接 99
6.5.3 深入理解EX06A应用 100
6.6.1 获得OnOK退出控制 101
6.6 增强对话框函数 101
6.6.3 和滚动条控制挂上钩 103
6.6.2 OnCancel处理 103
6.7 确认控制:CWnd指针和控制ID 105
6.9 在对话框窗口内绘图 106
6.8 设置对话框的背景及其中控制的颜色 106
6.10 利用其它的控制特性 107
7.1.1 创建无模式对话框 108
7.1 无模式对话框 108
第七章 无模式对话框和COMMDLG对话框类 108
7.1.4 无模式对话框的例子——EX07A 109
7.1.3 对话框的归属 109
7.1.2 用户定义的消息 109
7.3 COMMDLG对话框 115
7.2 CFormView类——另外一个可供选择的无模式对话框 115
7.3.4 使用CFileDialog的一个例子——EX07B 116
7.3.3 从COMMDLG类进行派生 116
7.3.1 直接使用CFileDialog类 116
7.3.2 在程序运行的过程中加进对话框控制 116
8.1 Windows的标准控制和普通常规控制 122
第八章 Visual Basic控制 122
8.2.2 属性和数据成员 123
8.2.1 方法和成员函数 123
8.2 C++的类和Visual Basic控制 123
8.4 CVBControl类 124
8.3 Visual Basic事件登记 124
8.2.3 Visual Basic控制事件和Windows控制通知 124
8.5 EX08A例程序 125
8.5.2 创建EX08A例程序 126
8.5.1 Visual BasicGRID控制 126
8.8 编写和利用Visual Basic控制的有利和不利因素 135
8.7 Visual Basic的图象属性 135
8.6 利用其它的Visual Basic控制 135
9.1 内存模式综述 136
第九章 全新的Windows内存管理 136
9.2.1 Intel段结构 137
9.2 16位Windows 137
9.2.2 DGROUP段和多事件程序 138
9.2.4 近程函数调用 139
9.2.3 内存模式——一个代码段还是多个代码段 139
9.2.5 内存模式——一个数据段还是多个 140
9.2.7 全局堆 142
9.2.6 局部堆 142
9.2.10 80386/80486的虚内存管理器 144
9.2.9 直接使用Windows的内存申请函数 144
9.2.8 程序的vtable在内存中的位置 144
9.3 检测内存疏漏(Leak) 145
9.4 内存用尽时该如何处理 146
10.2 使用GDI位图 147
10.1 GDI位图和与设备无关的位图(DIB) 147
第十章 位图 147
10.4 从资源中装入GDI位图 148
10.3 彩色位图和单色位图 148
10.6 对位进行伸缩处理 149
10.5 显示映射方式的作用 149
10.6.1 EX10A例程序 150
10.7 利用位图改进屏幕显示 152
10.7.1 EX10B例程序 153
10.8 GDI位图的其它应用 157
11.1.1 EX11A例程序 158
11.1 位图按钮 158
第十一章 位图按钮、计时器和空状态处理 158
11.1.2 对位图按钮的进一步讨论 162
11.2.2 产生控制 163
11.2.1 计时器 163
11.2 计时器的使用及控制的产生 163
11.2.3 EX11B例程序 164
11.3 空状态处理 167
11.3.1 EX11C程序 168
12.1 主框架窗口和文档类 175
第十二章 菜单和键盘加速键 175
第三部分 文档-视结构 175
12.2 Windows的菜单 176
12.4 命令处理 177
12.3 键盘加速键 177
12.4.2 更新命令用户接口(UI)消息 178
12.4.1 派生类中的命令消息控制 178
12.5 应用框架的内含菜单项 179
12.4.3 对话框发送的命令 179
12.6 菜单项的允许/禁止 180
12.8 EX12A例程序 181
12.7 CEditView类 181
12.9 CMenu类 186
12.10 扩展命令处理 187
12.11 EX12B例程序 188
13.2 工具条 193
13.1 控制条和应用框架 193
第十三章 工具条和状态条 193
13.2.2 按钮的状态 194
13.2.1 工具条位图 194
13.2.4 工具条更新命令UI消息 195
13.2.3 工具条和命令消息 195
13.3 寻找主框架窗口 196
13.4 EX13A工具条例程序 197
13.5.2 信息行 202
13.5.1 状态条的定义 202
13.5 状态条 202
13.5.4 获得对状态条的控制 203
13.5.3 状态指示器 203
13.6 EX13B状态条例程序 204
14.2 CPersistentFrame类 209
14.1 为什么可重用基类难以设计 209
第十四章 可重用基类 209
14.4 Windows的INI文件 210
14.3 CFrameWnd类和ActivateFrame成员函数 210
14.5 使用CString类 212
14.8 缺省窗口矩形 214
14.7 静态数据成员 214
14.6 极大窗口的位置 214
14.9 EX14A例程序 215
14.10 MDI应用中的持续框架 220
15.1.1 CView类的GetDocument函数 221
15.1 文档-视之间的相互作用函数 221
第十五章 文档与视的分离 221
15.1.3 CView类的OnUpdate函数 222
15.1.2 CDocument类的UpdateAllViews函数 222
15.2 最简单的文档-视应用 223
15.1.4 CView的OnInitialUpdate函数 223
15.3 CFormView类 224
15.5.1 TRACE宏 225
15.5 诊断信息转储 225
15.4 CObject类 225
15.5.3 信息转储环境及CObject类 226
15.5.2 afxDump对象 226
15.5.4 未被删除对象的自动信息转储 227
15.6 EX15A例程序 229
15.7 更加高级的文档-视之间的相互作用 235
15.9 CObList集合类 236
15.8 CDocument的Delete Contents函数 236
15.9.1 对先入先出(FIFO)表使用CObList类 237
15.9.2 在CObList中进行迭代——POSITION变量 238
15.9.3 信息转储环境及集合类 239
15.10 EX15B例程序 240
15.11 CEx15bApp 241
15.13 CStudentDoc 242
15.12 CMainFrame 242
15.13.4 GetList 245
15.13.3 构造函数和析构函数 245
15.13.1 ClassWizard和CStudentDoc 245
15.13.2 数据成员 245
15.14 CStudentView 246
15.13.6 Dump 246
15.13.5 DeleteContents 246
15.14.1 ClassWizard和CStudentView 253
15.14.6 工具条按钮的更新命令UI消息控制函数 254
15.14.5 工具条按钮命令消息控制函数 254
15.14.2 数据成员 254
15.14.3 OnInitialUpdate 254
15.14.4 OnUpdate 254
15.15.3 IDD_STUDENT对话框 255
15.15.2 Edit菜单 255
15.14.7 protected型虚函数 255
15.15 资源要求 255
15.15.1 符号 255
15.15.4 工具条 256
15.15.5 测试EX15B应用 256
15.16 留给读者的两个练习 257
16.1.1 磁盘文件和归档(Archives) 258
16.1 什么是序列化 258
第十六章 读和写文档——单文档接口 258
16.1.3 编写序列化函数 259
16.1.2 使类可序列化 259
16.1.4 从归档中装入——内嵌对象和指针 260
16.1.6 序列化函数和应用框架 263
16.1.5 使集合序列化 263
16.2.2 文档模板类 264
16.2.1 Windows应用对象 264
16.2 SDI应用 264
16.2.3 文档模板资源 265
16.2.6 文档类的OnNewDocument函数 267
16.2.5 创建空文档——CWinApp的OnFileNew函数 267
16.2.4 SDI文档的多视 267
16.2.9 将File Save和File Save As与序列化代码相连接 268
16.2.8 文档类的DeleteContents函数 268
16.2.7 将File Open与序列化代码相连接——OnFileOpen 268
16.3 EX16A——序列化SDI例程序 269
16.2.10 文件的IsModified标记 269
16.4 CStudent 270
16.5 CEx16aApp 271
16.6 CFrameWnd 275
16.7.3 OnUpdateFileSave 278
16.7.2 OnOpenDocument 278
16.7 CStudentDoc 278
16.7.1 Serialize 278
16.7.6 测试EX16A应用 279
16.7.5 AppWizard和EX16A 279
16.7.4 CStudentView 279
16.7.7 File Manager中的文档相关 280
22.11.7 CloseAllChildWindows 282
17.1 MDI应用 282
第十七章 对文档的读和写——MDI 282
17.1.1 一个典型的具有MFC库风格的MDI应用 283
17.1.2 MDI应用对象 284
17.1.4 MDI框架窗口和子窗口 285
17.1.3 MDI文档模板类 285
17.1.5 主框架和文档模板资源 286
17.1.8 装入和存入文档 287
17.1.6 创建空文档——CWinAppp∷OnFileNew函数 287
17.1.7 为现存文档创建新的视 287
17.2.1 程序登记 288
17.1.9 多文档模板 288
17.2 拖和放——程序和文档 288
17.2.4 程序启动参数 289
17.2.2 允许拖和放 289
17.2.3 允许内嵌启动 289
17.3 EX17A例程序 290
17.2.5 响应DDE消息 290
17.4 CEx17aApp 291
17.5 CMainFrame 295
17.5.1 测试EX17A应用 297
17.6 EX17B例程序 298
18.1.2 交互选择打印页码 301
第十八章 打印和打印预显 301
18.1 Windows的打印 301
18.1.1 标准打印机对话框 301
18.3 有关打印机的程序设计 303
18.1.3 显示页和打印页 303
18.2 打印预显 303
18.3.3 准备设备环境——CView类∷OnPrepareDC函数 304
18.3.1 打印机设备环境和CView∷OnDraw函数 304
18.3.2 CView类∷OnPrint函数 304
18.4 EX18A例程序——一个所见即所得的打印程序 305
18.3.4 打印工作的开始和结束 305
18.5 EX18B例程序——多页打印程序 311
18.6 留给读者的一些练习 316
19.2 多视选择 317
第十九章 切分窗口和多视 317
19.1 切分窗口 317
19.4.1 CMainFrame 318
19.3 动态和静态切分窗口 318
19.4 EX19A——具有单个视类的SDI动态切分例子 318
19.4.2 资源需求 319
19.5.1 CHexView 320
19.4.3 测试EX19A应用 320
19.5 EX19B——双视类SDI静态切分例子 320
19.5.2 CMainFrame 321
19.6.1 CEx19cApp 322
19.5.3 测试EX19B应用 322
19.6 EX19C——多视类MDI例子 322
19.6.2 CMainFrame 323
19.6.4 测试EX19C应用 325
19.6.3 资源要求 325
20.1.1 复文本格式(RTF) 326
第二十章 上下文相关帮助 326
20.1 Windows的WINHELP程序 326
20.1.2 编写简单的帮助文件 327
20.2 应用框架与WINHELP 331
20.2.3 帮助上下文别名 332
20.2.1 调用WINHELP 332
20.2.2 使用搜索字符串 332
20.2.5 进入帮助的菜单 333
20.2.4 决定帮助上下文 333
20.2.8 消息框帮助——AfxMessageBox函数 334
20.2.6 F1帮助 334
20.2.7 Shift-F1帮助 334
20.3 帮助例子——不需要任何编程 335
20.2.9 一般的帮助 335
20.5 帮助命令处理 337
20.4 MAKEHELP处理 337
20.5.2 Shift-F1处理过程 338
20.5.1 F1处理过程 338
20.9 CMDIHelpWnd 339
20.6 帮助命令处理例程序——EX20B 339
20.7 头文件要求 339
20.8 CEx20bApp 339
20.11 CHexView 341
20.10 CStringView 341
20.13 帮助文件要求 342
20.12 资源要求 342
20.14 创建并测试该应用 343
21.1 MATPLAN应用 344
第二十一章 一个实际的基于Windows的应用 344
21.3.1 InitInstance 346
21.2 对MATPLAN应用的分析 346
21.3 CMatplanApp 346
21.4.3 DeleteContents 347
21.3.2 ExitInstance 347
21.4 CMatplanDoc 347
21.4.1 构造函数 347
21.4.2 Serialize 347
21.5.2 OnWindowNew2 348
21.4.4 OnEditClearAll 348
21.5.5 OnUpdateEditClearAll 348
21.5.6 OnUpdateFileSave 348
21.5 CMainFrame 348
21.5.1 OnWindowNew1 348
21.7.1 Draw 349
21.6 CMDISpecialChildWnd 349
21.6.1 OnCommandHelp 349
21.7 CPiece 349
21.7.4 InsertInList,ExtractFromList 350
21.7.2 PrintLine 350
21.7.3 Serialize 350
21.8.1 构造函数 351
21.8 CMatplanDialog 351
21.8.3 OnclickedCancel 352
21.8.2 DoDataExchange 352
21.9 ClistView 353
21.8.4 OnClear,OnDelete,OnInsert,OnUpdate 353
21.8.5 OnCancel 353
21.9.3 OnPrint 354
21.9.1 OnPrepareDC 354
21.9.2 OnDraw 354
21.9.6 OnBeginPrinting,OnEndPrinting 355
21.9.4 OnUpdate 355
21.9.5 OnPreparePrinting 355
21.9.9 OnSize 356
21.9.7 OnCreate 356
21.9.8 OnPaint 356
21.9.11 OnCommandHelp,OnHelpHitTest 357
21.9.10 OnListBoxDblClk 357
21.10.1 OnDraw 358
21.9.12 StartNewList 358
21.9.13 UpdatePlanDocument 358
21.10 CPlanView 358
21.10.4 OnInitialUpdate 359
21.10.2 OnPreparePrinting 359
21.10.3 OnUpdate 359
21.10.5 OnPaint 360
21.10.7 OnMouseMove 361
21.10.6 OnLButtonDown 361
21.10.8 OnLButtonUp 362
21.10.13 SafeScrollTo 363
21.10.9 OnLButtonDblClk 363
21.10.10 OnKeyDown 363
21.10.11 OnCommandHelp,OnHelpHitTest 363
21.10.12 ShowOverlap 363
21.11.1 IDD_FORM对话框 364
21.11 MATPLAN资源文件 364
21.13 创建并测试MATPLAN应用 365
21. 11.2 IDR_MATTYPE菜单 365
21.11.3 符号 365
21.12 头文件 365
22.1 EX22A例子——一个SDI应用 369
第四部分 高级话题 369
第二十二章 不带文档和视的Microsoft基本类库2.0版程序 369
22.3.3 OnClose 372
22.2 CEx22aApp 372
22.2.1 InitInstance 372
22.3 CMainFrame 372
22.3.1 构造函数 372
22.3.2 OnPaint 372
22.5 EX22B例程序——一个基于对话框的应用 373
22.3.4 OnQueryEndSession 373
22.3.5 OnFile,OnHlp 373
22.4 资源要求 373
22.7.3 DoDataExchange 376
22.6 CEx22bApp 376
22.6.1 数据成员 376
22.6.2 InitInstance 376
22.7 CEx22bDialog 376
22.7.1 数据成员 376
22.7.2 构造函数 376
22.9 EX22C例程序——一个MDI应用 377
22.7.4 OnClickedCompute 377
22.8 资源要求 377
22.11.1 构造函数 381
22.10 CEx22cApp 381
22.10.1 InitInstance 381
22.11 CMainFrame 381
22.12.1 数据成员 382
22.11.2 OnClose 382
22.11.3 OnQueryEndSession 382
22.11.4 OnFileNew 382
22.11.5 OnWindowCloseAll 382
22.11.6 OnUpdateWindowCloseAll 382
22.12 CChildFrame 382
22.13 资源要求 383
22.12.6 删除CMDIChildWnd对象 383
22.12.2 构造函数 383
22.12.3 OnPaint 383
22.12.4 OnClose 383
22.12.5 OnFileClose 383
23.1 Windows的DIB格式 385
第二十三章 将位图存入文档——DIB和裁剪板 385
23.2 DIB、颜色以及调色板 386
23.4 位图裁剪板规则 387
23.3 通过裁剪板来传递图象 387
23.7 CDib类 388
23.6 利用DIB进行打印 388
23.5 MFC库文档中的DIB 388
23.8 DIB访问函数 397
23.10 CEx23aDoc 398
23.9 EX23A例程序 398
23.12.1 内存申请 399
23.12 CDib 399
23.10.1 构造函数,析构函数 399
23.10.2 DeleteContents 399
23.10.3 Serialize 399
23.10.4 OnEditClearAll 399
23.11 CBitsDialog 399
23.13.1 构造函数,析构函数 400
23.13 CEx23aView 400
23.12.2 大位图的序列化 400
23.13.3 OnInitialUpdate 401
23.13.2 OnCreate 401
23.13.4 OnDraw 402
23.13.7 OnEditCut 403
23.13.6 OnEditCopyTo 403
23.13.5 OnEditCopy 403
23.13.10 OnPrint 404
23.13.9 OnEditPasteFrom 404
23.13.8 OnEditPaste 404
23.14.1 IDD_BITS对话框资源 405
23.14 EX23A资源文件 405
23.13.11 OnUpdate 405
23.13.12 更新命令UI函数 405
23.15 测试EX23A应用 406
23.14.2 IDR_MAINFRAME菜单资源 406
23.16 位图操作 407
24.1 数据库管理和序列化 408
第二十四章 Microsoft ODBC数据库管理 408
24.3 ODBC标准 409
24.2 SQL 409
24.5 ODBC SDK程序设计 410
24.4 ODBC结构 410
24.6 MFC ODBC类 412
24.7 EX24A例程序 413
24.8 CEX24A例程序中的元素 417
24.8.3 CEx24aView类的OnDraw成员函数 418
24.8.2 CEx24aView类的OnIitialUpdate成员函数 418
24.8.1 记录集类与应用之间的连接 418
24.9 MFC库对话框条 419
24.11 行-视类 420
24.10 应用的关闭 420
24.11.2 将工作分摊于基类和派生类 430
24.11.1 滚动问题 430
24.12 针对动态记录集进行程序设计 431
24.11.4 CRowView的其它函数 431
24.11.3 CRowView的纯虚成员函数 431
24.14 EX24B例程序 432
24.13 清点记录集中的行 432
24.15 CEx24bApp 433
24.17.3 OnFileConnect 434
24.17.2 OnNewDocument 434
24.16 CMainFrame 434
24.17 CEx24bDoc 434
24.17.1 数据成员 434
24.17.4 OnFileDisconnect 435
24.18 CEx24bView 436
24.17.8 Serialize 436
24.17.5 OnQueryRequery 436
24.17.6 PutFilterSort,GetFilterSort 436
24.17.7 SaveModified 436
24.18.5 OnDrawRow,DrawDataRow 437
24.18.4 GetRowCount 437
24.18.1 数据成员 437
24.18.2 OnUpdate 437
24.18.3 GetRowWidthHeight,GetActiveRow,ChangeSelectionNexRow,ChangeSelectionToRow 437
24.19.2 Initialize 440
24.19.1 数据成员 440
24.19 CEx24bSet 440
24.19.3 DoFieldExchange 441
24.19.4 析构函数 442
24.20.3 OnInitDialog 443
24.20.2 构造函数 443
24.20 CTableSelect 443
24.20.1 数据成员 443
24.21 EX24B资源文件 444
24.20.4 OnDblclkList1 444
24.23 对ODBC的进一步讨论 445
24.22 运行EX24B程序 445
25.1 OLE的学习 446
第二十五章 对象连接与嵌入(OLE)及其自动化 446
25.2.2 COM的实质 447
25.2.1 COM解决的问题 447
25.2 公共对象模式(COM) 447
25.2.3 什么是COM接口 448
25.2.4 IUnknown接口和QueryInterface成员函数 452
25.2.5 引用记数:AddRef和Release函数 455
25.3 类厂(class factory) 456
25.3.1 COM和MFC——CCmdTarget类 457
25.3.2 一个可运行的COM例子 458
25.3.3 OLE和窗口登记数据库 466
25.3.4 运行时刻对象登记 467
25.3.5 COM客户程序是如何调用DLL侍者程序的 468
25.3.6 COM客户程序是如何调用EXE侍者程序的 469
25.3.7 MFC和OLE 470
25.4.1 C++与Visual Basic for Application(VBA)之间的连接 471
25.4 OLE自动化 471
25.3.8 包容和继承 471
25.4.3 Microsoft Excel——一种比Visual Basic还好的VisualBasic 472
25.4.2 自动化控制程序和自动化侍者程序 472
25.4.4 属性(property)、方法(method)和集合(collection) 474
25.5 IDispatch接口 475
25.4.5 OLE自动化所解决的问题 475
25.5.1 OLE自动化程序设计 476
25.5.3 一个MFC OLE自动化侍者 477
25.5.2 MFCIDispatch的实现 477
25.5.4 一个MFC OLE自动化控制程序 478
25.5.5 VARIANT类型 480
25.5.6 CVariant类 482
25.5.7 Invoke的参数和返回值的类型转换 484
25.6.1 EX25B自动化侍者EXE——不带任何用户接口 486
25.6 OLE自动化例子 486
25.6.2 EX25C自动化侍者DLL 492
25.6.3 EX25D SDI自动化侍者EXE 498
25.6.4 EX25E自动控制程序 503
25.6.5 针对EX25B.EXE的市场控制程序类 504
25.6.6 针对EX25C.DLL的控制程序类 506
25.6.7 针对EX25D.EXE的控制程序类 508
25.6.8 控制Microsoft Excel 509
25.7 OLE及其未来 514
第二十六章 动态连接库(DLLs) 516
26.1 为什么使用DLL 516
26.2 传统的DLL 516
26.3 MFC库DLL 517
26.3.1 类库DLL的使用仅限于Microsoft C++编译器 517
26.3.2 作为DLL的类库类 518
26.3.3 在应用中使用MFC 250D.DLL 518
26.3.4 MFC库扩展DLL 519
26.3.5 MFC库DLL内存使用 519
26.3.6 扩展DLL需要的一些代码 520
26.3.7 搜索资源 520
26.3.8 内联构造函数 521
26.3.9 扩展DLL的引出 521
26.3.11 扩展DLL运行时刻类的确定 522
26.3.12 创建DLL 522
26.3.10 类静态数据成员 522
26.3.14 DLL的调试版和发行版 523
26.4 EX26A——编写自己的类库扩展DLL 523
26.3.13 创建引入库 523
26.4.1 EX26AD.DEF文件 524
26.4.2 EX26AD工程的Visual工作平台选项 525
26.4.3 创建引入库并拷贝DLL 526
26.5 EX26B——使用MFC库扩展DLL 526
26.7 CEx26bDoc 527
26.8 CEx26bView 527
26.6 CEx26bApp 527
26.9 CStudentDialog 529
26.10 创建并测试EX26B程序 529
26.10.1 资源访问 530
第五部分 附录 535
附录A C++语言的速成教程 535
附录B Microsoft基本类(MFC)库中的消息映射函数 566
附录C 本书中用到的MicrosoftWindows函数 570
附录D 用于Windows NT的Visual C++版本2.0 572