第1部分 Win32与面向对象编程 1
第1章 面向对象编程与软件的可重用性 1
1.1.1 从过程编程到面向对象编程 1
1.1 面向对象编程综述 1
1.1.2 继承(Inheritance) 3
1.1.3 多态(Polymorphism)和虚拟方法(Virtual Methods) 5
1.3 C++中的对象和类 6
1.2 C++:对象连接(Object Connection) 6
1.3.1 构造函数(Constructors)与析构函数(Destructors) 8
1.4 代码重用(code Reuse)的优点 8
1.6 模板 9
1.5 类库 9
1.4.1 停止重复开发 9
1.7.1 动态链接库(DLLs) 10
1.7 对象构件 10
1.7.2 Visual Basic Extensions(VBXs) 11
1.7.3 OLE Control Extensions(OCXs) 11
1.8 小结 11
2.2 剖析程序 13
第2章 剖析Windows SDK程序 13
2.1 面向对象Windows之前 13
2.3 什么是Windows窗口 14
2.4 Windows软件开发工具包(SDK) 14
2.5 Windows应用程序设计接口(API) 15
2.5.1 Win16和Win32API 15
2.6 事件驱动程序设计和消息循环 16
2.6.1 事件驱动模型 16
2.7 WinMain( )函数 19
2.8 窗口过程 20
2.8.1 窗口类和窗口样式 21
2.8.2 模块定义文件 22
2.9 最小的SDK Windows程序 23
2.9.1 剖析程序 27
2.9.2 处理窗口过程中的消息 28
2.10 修订的最小SDK Windows程序 30
2.10.1 流线型的WinMain( ) 33
2.10.2 用Init Application( )初始化和注册窗口类 33
2.11 小结 34
2.10.3 用InitInstance( )创建应用程序窗口 34
3.1 新的Windows Shell 35
第3章 Windows编程问题 35
3.1.1 Explorer 35
3.2 Windows中的新概念 37
3.2.1 进程与线程 37
3.2.2 线程同步 38
3.2.3 内存映像文件 38
3.2.4 线程本地存储 38
3.3 动态链接库 39
3.2.5 信箱和管道 39
3.4.5 进度栏控件 40
3.4.4 列表视图控件 40
3.4.3 图像列表控件 40
3.4.2 热键控件 40
3.4.1 动画控件 40
3.4 Windows公用控件 40
3.4.6 多功能编辑控件 41
3.4.7 滑动控件 42
3.4.8 旋转按钮控件 42
3.4.9 状态栏控件 42
3.4.10 标记控件 43
3.4.11 工具栏控件 43
3.5 Windows NT兼容性 44
3.4.12 工具提示控件 44
3.4.13 树型视图控件 44
3.5.1 体面降级 45
3.6 小结 46
第4章 内存管理 47
4.1.1 栈分配 47
4.1 MFC内的内存管理 47
4.1.2 堆分配 48
4.2 32位内存页式管理 48
4.2.1 32位地址空间和Windows 95内存范围(arenas) 48
4.2.2 32位地址空间和Windows NT内存管理 50
4.3 虚拟内存管理 51
4.3.2 页映像 51
4.3.1 分页文件 51
4.3.3 空闲、保留和占用虚存 52
4.3.4 页状态 52
4.4 分配页 53
4.4.1 Virtual Alloc( )函数 53
4.5 内存一映像文件 54
4.4.3 其他虚页函数 54
4.4.2 保护页 54
4.6.1 文件对象 55
4.6 内存一映像文件的实现 55
4.6.2 文件一映像对象 55
4.6.3 文件视图映像 56
4.7 小结 57
第5章 Microsoft基本类库引论 58
5.1 MFC前的AFX 58
5.1.1 Application Framework(AFX) 58
5.1.3 MFC的演变 59
5.1.2 返回到绘图板 59
5.3 在MFC内使用New Shell公用控件 60
5.2 了解MFC设计要点 60
5.4 硬件平台可移植性 60
5.5 文档/视图结构 61
5.6 MFC类层次 61
5.7 CObject类:MFC的根 62
5.7.1CObject服务 62
5.7.2 CObject类方法 63
5.8.1 数据、列表和映像类 64
5.8 从CObject派生的MFC子系统 64
5.8.6 控件支持 65
5.8.5 Windows Sockets(插件)和Internet服务类 65
5.8.4 文件和数据库类 65
5.8.3 图形类 65
5.8.2 调试和异常类 65
5.8.7 菜单 66
5.8.8 MFC应用程序结构类和同步类 66
5.9 文档和视图 68
5.9.1 文档模板 68
5.9.2 窗口、对话框和控件类 69
5.10 非CObject派生的MFC子系统 71
5.10.1 OLE类 72
5.10.3 支持类 72
5.10.2 简单数据类型类 72
5.10.4 同步类 73
5.10.5 类型模板类 73
5.11 两级对象构造 73
5.12 最小MFC程序:MINMFC1 74
5.13 小结 75
6.1 事件驱动程序设计 77
第6章 消息与消息处理 77
6.1.1 方法与消息 77
6.2 了解消息 77
6.2.1 MFC内的WinMain( ) 77
6.2.3 系统定义的消息 80
6.2.2 消息结构 80
6.2.4 用户定义的消息 81
6.2.5 隐藏消息循环 81
6.3 应用程序类简介:CWinApp 84
6.4.1 窗口消息 85
6.3.1 全局应用程序对象Helper函数 85
6.4 消息处理程序 85
6.4.2 控制通知消息 86
6.4.3 命令消息 86
6.5 消息映像 86
6.5.1 透明地映像消息 86
6.6 消息映像项与消息处理方法 89
6.6.1 命令消息处理程序 89
6.6.2 子窗口通知消息处理程序 90
6.6.3 Windows消息处理程序 92
6.6.4 用户定义的消息处理程序 97
6.7 样本程序:最小消息映像App(MINMFC2) 98
6.8 小结 100
第7章 处理用户输入 101
7.1 鼠标处理 101
7.1.1 用户区鼠标消息 101
7.1.2 鼠标捕捉 102
7.1.3 非用户区鼠标消息 105
7.2 键盘处理 106
7.2.1 键盘消息 107
7.2.2 虚键代码 108
7.2.3 检测Shift状态和切换键 109
7.2.4 Windows的字符键 110
7.2.5 字符消息 111
7.3 样本程序:鼠标和键盘键入(MOUSEKEY) 112
7.3.1 检验应用程序头文件(MOUSEKEY.H) 113
7.3.2 实现MOUSEKEY程序(MOUSEKDY.CPP) 114
7.4 小结 118
第8章 设备描述表和图形对象 120
8.1 设备描述表 120
8.1.1 图形设备接口 120
8.2 MFC设备描述表类 120
8.2.1 基类:CDC 121
8.2.2 用类CPaintDC绘画 124
8.2.3 用类CClientDC管理用户区 125
8.2.4 用类CWindowDC管理框架窗口 126
8.2.5 具有类CMetaFileDC的Windows元文件 127
8.3 图形对象 128
8.3.1 笔:类CPen 129
8.3.2 刷子:类CPrush 131
8.3.3 字体:类CFont 132
8.3.5 调色板:类CPalette 133
8.3.4 位图:类CBitmap 133
8.3.6 区域:类CRgn 134
8.4 小结 135
9.1 GDI坐标系统 136
第9章 矢量图形和正文 136
9.1.1 逻辑映像方式 137
9.1.2 建立映像方式 137
9.1.3 CDC矢量图形方法 139
9.1.4 绘图方式 139
9.1.5 点 140
9.1.6 绘制点 141
9.1.7 线和多边形 142
9.1.8 矩形 145
9.1.9 区域 149
9.1.10 多边形 151
9.1.11 Bezier曲线 151
9.1.12 元文件 153
9.2 字体和正文 157
9.2.2 TEXTMETRIC结构 157
9.2.1 字体特征 157
9.2.3 LOGFONT结构 160
9.2.4 字体创建 161
9.2.5 绘制正文 162
9.3 样本程序:矢量图形和正文方法(VECTEXT1.EXE) 164
9.4 小结 165
10.1 光栅图形 166
第10章 光栅图形和调色板 166
10.1.1 位图 166
10.1.2 设备相关位图(DDBs) 167
10.1.3 设备无关位图(DIBs) 168
10.1.4 CBitmap类 168
10.1.6 传送和扭曲位图 169
10.1.5 已命名的光栅操作(Named Raster Operations-ROPs) 169
10.1.7 样本应用程序:RASTER1.EXE 171
10.2 调色板和调色板管理 172
10.2.1 颤动 173
10.2.2 硬件调色板 173
10.2.3 系统调色板 173
10.2.4 逻辑调色板 174
10.2.5 类CPalette 175
10.2.7 样本程序:PALETTE1.EXE 179
10.2.6 调色板消息 179
10.3 小结 183
第11章 有用的通用类 184
11.1 字符串:使用类CString 184
11.1.1 与C风格字符串兼容 184
11.1.2 字符串赋值、连接、比较和析取 185
11.1.3 字符串的序列化和缓冲区 187
11.1.4 Unicode支持 187
11.2 集合类 188
11.2.1 集合形 188
11.2.2 非样板为基集合类 188
11.2.3 样板为基的集合类 189
11.3 诊断服务 190
11.3.1 通用诊断宏 190
11.3.2 MFC通用诊断变量和函数 191
11.4 日期和时间类 192
11.3.3 MFC对象诊断函数 192
11.5 小结 193
12.1扩展MFC功能性 195
12.2.1 CMainFrame类界面:MAINFRAM.H 195
12.2 自定义框架窗口基类:CMainFrame 195
第12章 定义你自己的类 195
12.2.2初始化子窗口CreateChiled-Controls( ) 198
12.2.3 确定框架窗口的中心:Center-Window( ) 198
12.2.4 封装Win32API函数:GetWindows VerInfo( ) 199
12.2.5 显示Windows 版本信息:Show Windows VerInfo( ) 200
12.2.7 取用户区高宽:GetHeight( ) 202
12.2.8 将整数转换为字符串:IntTo-String( ) 202
12.2.9 将字符串转换为整数:StringTo-Int( ) 202
12.2.6 取用户区宽度:Get Width( ) 202
12.2.10 设置默认窗口颜色:SetClient-Backcolor( ) 203
12.2.11 用RGB颜色绘制用户区:Set-ClientColorRGB( ) 203
12.2.12 调整窗口背景涂色:OnErase-Bkgnd( ) 204
12.2.13 改变窗口的字体:SetWndFont( ) 204
12.2.14 改变子控件字体:SetChildFonts( ) 205
12.3 小结 205
13.1 应用程序对象的作用 207
第13章 框架窗口、文档及视图 207
13.2 框架窗口对象 208
13.2.1 框架窗口基类:CFrame Wnd 209
13.2.2 窗口构造 210
13.3 文档 211
13.3.1 文档基类CDocument 211
13.4 视图 212
13.4.1 增强的CView派生类 213
13.5.1 把类组合在一起 214
13.5 文档模板 214
13.5.2 文档模板基类:CDoc Template 215
13.5.3 创建文档模板 216
13.5.4 文档模板字符串 216
13.6 文档/视图消息传递 217
13.6.1 命令发送 217
13.6.2 默认命令标识符及处理程序 219
13.7 样本程序:最小的文档/视图应用程序(DOCVIEW1.EXE) 220
13.7.1 应用程序类 221
13.7.2 文档类 224
13.7.3 框架窗口类 225
13.7.4 视图类 226
13.8 小结 228
14.1 打印 230
14.1.2 打印循环:CView::OnFilePrint( ) 230
14.1.1 设备无关性 230
第14章 打印和打印预览 230
14.1.3 准备打印 231
14.1.4 CPrintInfo类结构 232
14.1.5 Print对话框 233
14.1.6 开始打印作业 234
14.1.7 准备打印设备描述表 234
14.1.8 打印作业 234
14.1.9 清除 235
14.2 打印预览 235
14.2.1 CView::OnFilePrintPreview( )内部结构 235
14.3 样本程序 236
14.3.1 增加打印及打印预览 236
14.3.2 调用打印预览 239
14.4 小结 239
第15章 按钮和滚动控件 241
15.1 按钮控件:CButton类和CBitMapButton类 242
15.1.1 按钮样式 243
15.1.2 CButton和CBitmapButton类结构 245
15.1.3 CButton和CBitmapButton消息 245
15.1.5 创建和初始化按钮 247
15.1.6 样本程序:使用每一种按钮样式 248
18.2 动画控件:类CAnimateCtrl 249
15.2 微调(spin)控件:CSpinButtonCtrl类 254
15.2.1 微调控件样式 255
15.2.2 CSpinButtonCtrl类结构 256
15.2.3 CSpinButtonCtrl消息 256
15.2.5 创建及初始化微调控件 257
15.2.4 CSpinButtonCtrl类方法 257
15.3 滚动条:CScrollBar类 260
15.3.1 滚动条样式 262
15.3.2 CScrollBar类结构 262
15.3.3 CScrollBar消息 263
15.3.4 CScrollBar类方法 264
15.3.5 创建和初始化滚动条 265
15.3.6 样本程序:滚动条 266
15.4 滑动控件:CSliderCtrl类 272
15.4.2 CSliderCtrl类结构 273
15.4.1 滑动控件样式 273
15.4.3 CSliderCtrl消息 274
15.4.4 CSliderCtrl类方法 275
15.4.5 创建和初始化滑动控件 276
15.4.6 样本程序:滑动控件(SLIDERI) 277
15.5 小结 278
16.1 列表框控件:CListBox类 280
第16章 列表框、编辑和组合框控件 280
16.1.1 列表框样式 281
16.1.2 CListBox类结构 282
16.1.4 CListBox类方法 284
16.1.3 CListBox消息 284
16.1.5 创建和初始化CListBox对象 287
16.1.6 样本程序:单选项和多选项文件列表框 287
16.1.7 自绘列表框 292
16.2 编辑控件:CEdit类 293
16.2.1 编辑控件样式 294
16.2.2 CEdit类结构 296
16.2.3 CEdit消息 297
16.2.4 CEdit类方法 297
16.2.5创建和初始化编辑控件 299
16.3 组合框控件:CComboBox类 303
16.3.1 组合框样式 304
16.3.2 CComboBox类结构 305
16.3.4 CComboBox类方法 308
16.3.6 样本程序:一个具有自绘颜色项的组合框 310
16.3.5 创建和初始化组合框 310
16.4 小结 317
17.1.1 CImageList类结构 318
17.1 图像列表控件:类 CImageList 318
第17章 图像列表、列表视图、树视图、进度栏和热键控件 318
17.1.2 CImageList类方法 320
17.1.3 CImageList控件的创建及初始化 320
17.2 列表视图控件:类CListCtrl 321
17.2.1 列表视图控件样式 323
17.2.3 CListCtrl类结构 324
17.2.2 图像列表与列表视图控件 324
17.3 列表视图项及其子项 326
17.3.1 列表视图的通知(Notification)消息 327
17.3.2 CListCtrl类方法 328
17.3.3 创建及初始化CListCtrl对象 329
17.3.4 使用列表视图控件 329
17.4 树视图控件:类CTreeCtrl 331
17.4.1 树视图控件样式 332
17.4.2 CTreeCtrl类结构 332
17.4.3 树视图通知消息 334
17.4.4 CTreeCtrl类方法 334
17.5 进度栏控件:类CProgressCtrl 336
17.4.7 样本程序:TREELIST.EXE 336
17.4.6 使用CTreeCtrl对象 336
17.4.5 创建并初始化树视图控件 336
17.5.1 CProgressCtrl类结构 338
17.5.2 CProgressCtrl类方法 338
17.5.3 创建并初始化CProgressCtrl对象 339
17.5.4 使用进度控件 339
17.6 热键控件:类CHotKeyCtrl 339
17.6.1 CHotKeyCtrl类结构 340
17.6.2 CHotKeyCtrl类方法 341
17.6.3 创建并初始化CHotKeyCtrl对象 341
17.6.4 使用热键控件 341
17.7 小结 342
18.1 制表控件:类CTabCtrl 343
第18章 制表、动画和多功能编辑控件 343
18.1.1 制表控件样式 344
18.1.2 CTabCtrl类结构 345
18.1.4 CTabCtrl类方法 346
18.1.3 制表控件通知消息 346
18.1.6 创建初始化一个制表控件 347
18.1.5 制表项结构(TC-ITEM) 347
18.1.7 使用制表控件 348
18.2.1 动画控件样式 351
18.2.2 CAnimateCtrl类结构 351
18.2.3 动画控件通知消息 352
18.2.4 CAnimateCtrl类方法 352
18.2.5 创建和初始化一个动画控件 352
18.2.6 使用动画控件 352
18.4 多功能编辑控件:CRichEditCtrl类 353
18.3.1 多功能编辑控件窗口样式 354
18.3.2 CRichEdit类结构 354
18.5 字符格式结构(CHARFORMAT) 356
18.6 段落格式结构(PARAFORMAT) 357
18.5.1 CRichEditCtrl类方法 359
18.5.2 CRichEditCtrl行相关方法 359
18.5.3 CRichEditCtrl文本选择方法 359
18.5.5 CRichEditCtrl编辑方法 360
18.5.4 CRichEditCtrl格式化方法 360
18.5.6 CRichEditCtrl剪贴板方法 360
18.5.7 CRichEditCtrl通用方法 360
18.5.8 创建并初始化一个多功能编辑控件 361
18.5.9 使用多功能编辑控件 361
18.7 样本程序:TAB1.EXE 362
18.6.1 决定显示对象 363
18.6.2 按样式填充多功能编辑控件 364
18.8 小结 365
第19章 工具栏、状态栏和工具提示 366
19.1 控件栏 366
19.2.1 CToolBar类 367
19.2 工具栏控件 367
19.2.2 CToolBarCtrl类 369
19.2.3 TBBUTTON结构 370
19.2.5 工具栏按钮样式 371
19.2.4 工具栏按钮状态 371
19.2.6 CToolBarCtrl类结构 372
19.2.7 工具栏通知消息 373
19.2.8 CToolBarCtrl类方法 374
19.2.9 创建和初始化工具栏控件 375
19.2.10 使用CToolBarCtrl对象 375
19.3.1 CStatusBar类 376
19.3 状态栏(Status Bars) 376
19.3.2 CStatusBarCtrl类 378
19.3.3 CStatusBarCtrl类结构 378
19.3.4 状态栏样式 379
19.4 工具提示控件:类CToolTipCtrl 380
19.3.5 创建并初始化状态栏控件 380
19.4.1 TOOLTIPTEXT(工具提示文本)结构 381
19.4.2 CToolTipCtrl类结构 382
19.4.3 处理ToolTip的TTN NEEDTEXT通知 383
19.4.4 CToolTipCtrl类方法 383
19.4.5 创建并初始化ToolTip(工具提示)控件 384
19.5 样本程序:CTRLBARI 384
19.5.1 应用程序类(CMyApp) 385
19.5.2 主框架窗口类(CMain Wnd) 386
19.5.3 创建控件 388
19.5.4 激活父窗口的工具提示 390
19.5.5 ToolTip通知处理器 390
19.5.6 更新状态栏并显示ToolTip 391
19.5.7 改变工具栏和状态栏的大小 392
19.6 小结 392
20.2 派生新的控件类 394
第20章 派生自定义控件 394
20.1 新控件的设计考虑 394
20.2.1 源文件 395
20.2.2 增加新的数据成员 395
20.2.3 定义新的控件类 396
20.2.4 覆盖继承DrawItem( )类的方法 398
20.2.5 绘制控件 399
20.3 PANEL1程序:测试派生CPanel3dCtrl类 405
20.4 小结 408
第4部分 资 源 409
第21章 图标、光标和位图 409
21.1 将资源附加于可执行文件上 410
21.2 从一个可执行文件中得到图像资源 410
21.3 图标 411
21.3.1 创建图标 412
21.3.2 使用256色图标 412
21.3.3 样本程序:用户区的图标(ICON1) 413
21.4.2 使用256色光标 418
21.4.3 使用动画光标 418
21.4 光标 418
21.4.4 样本程序:有方向的光标(CURSORI) 418
21.4.1创建光标 418
21.5 位图 423
21.5.1 创建位图 423
21.5.2 使用256色位图 423
21.5.3 利用光线跟踪位图以获取超现实主义效果 423
21.5.4 样本程序:开发位图资源(BITMAP1) 424
21.6 小结 428
第22章 菜单、加速器和字符串表 430
22.1 菜单 430
22.1.1 菜单消息 431
22.1.2 菜单结构 432
22.1.3 动态菜单 434
22.1.4 CMenu类的结构 434
22.1.5 CMenu类方法 435
22.2.1 创建加速器 437
22.2 加速器 437
22.2.2 装入并使用加速器 438
22.3 字符串表 438
22.3.1 裁掉多余的 439
22.3.2 自动装入资源 440
22.4.2 应用程序头文件(MAST.H) 441
22.4 样本程序:菜单、加速器和字符串表(MAST.EXE) 441
22.4.1 公用资源标识符 441
22.4.5 程序入口点:InitInstance( ) 443
22.4.3 实现MAST应用程序(MAST.CPP) 443
22.4.4 CMain Wnd消息映像 443
22.4.6 上下文菜单 444
22.4.7 响应菜单命令 445
22.5 小结 446
23.1 查看版本信息 448
第23章 版本信息和用户定义的资源 448
23.1.1 版本信息资源 449
23.1.2 版本资源结构 449
23.1.3 在应用程序中使用版本信息 453
23.2 用户自定义资源 455
23.2.1 访问你的自定义数据 456
23.2.2 一个用户定义资源样本:声波数据 457
23.3 小结 463
第24章 公用对话框 464
24.1 MFC中的标准公用对话框 465
24.1.1 公用对话框的错误检测 465
24.1.2 基公用对话框:类CCornmDialog 466
24.1.3 彩色对话框:类CColorDialog 466
24.1.4 文件对话框:类CFileDialog 468
24.1.5 Find和Replace对话框:类CFindReplaceDialog 471
24.1.6 字体对话框:类CFontDialog 474
24.1.7 打印对话框:类CPrintDialog 475
24.1.8 页设置对话框:类CPageSetup-Dialog 477
24.2 样本程序:使用公用对话框(DIALOG1.EXE) 480
24.2.1 使用彩色公用对话框 481
24.2.2 使用查寻、替换公用对话框 481
24.2.3 使用打开公用对话框 483
24.2. 5 使用打印公用对话框 484
24.2.4 使用另存为作为公用对话框 484
24.2.6 使用打印设置公用对话框 485
24.2.7 使用页面设置公用对话框 485
24.3 小结 487
25.1 对话框基本概念 488
25.1.1 对话框就是一个窗口 488
第25章 自定义对话框和对话栏 488
25.1.2 MFC对话框封套:类CDialog 489
25.1.3创建对象CDialog 489
25.1.4 对话控件 490
25.1.5 模态对话框 490
25.1.6 非模态式对话框 490
25.1.7 对话框模板 490
25.2 交换和验证对话框数据 491
25.1.8 映像消息到对话类 491
25.2.1更新数据 492
25.2.2 对话数据交换:DDX 492
25.2.4 类CDateExchange 493
25.2.3 对话数据验证:DDV 493
25.2.5 基于对话的应用程序 494
25.3 对话栏:类CDialogBar 494
25.3.1 对话栏控件样式 495
25.4 样本程序:DLALOG2 495
25.3.2 从对话栏得到消息 495
25.3.3 创建和使用对话栏 495
25.4.1 一个简单的About对话框类 496
25.4.2 一个更有趣的对话类 496
25.4.3 主框架窗口类 503
25.5 小结 505
26.1 属性工作表和属性页 506
第26章 Windows向导 506
26.1.1 类CPropertySheet和CPropertyPage 506
26.1.2 向导引路和属性工作表的连接 507
26.2 创建向导 508
26.2.1 设置向导模式 508
26.2.2 选择向导按钮 508
26.2.5 单击Back按钮 509
26.2.3 显示向导 509
26.2.4 向导通知消息 509
26.2.6 单击Next按钮 509
26.3.1 创建向导属性页的对话模板资源 510
26.3 样本程序:来看一下向导(Wizard1.exe) 510
26.3.2 为每一个对话资源建立对话类 510
26.3.3 开发“Welcome”页:类CIntroPage 512
26.3.4 开发“About you”页:类CPagel 515
26.3.5 更新CPage2和CPage3的向导信息 519
26.3.6 创建和显示向导 520
26.4 小结 521
27.1 类CFile 523
第27章 文件输入/输出和注册表 523
27.1.1 CFile类结构 523
27.1.2 CFile类方法 525
27.3 CMemFile类 528
27.3.1 CMemFile类方法 528
27.2 类CStdioFile 528
27.2.1 CStdilFile类方法 528
27.4.1 CSharedFile类方法 529
27.5 基本文件操作 529
27.5.1 创建、打开、读和写文件 529
27.4 类CSharedFile 529
27.5.2 复制、移动、换名和删除文件 530
27.5.3 样本程序:FILE1.EXE 532
27.5.4 样本程序:KILLHR.EXE 533
27.5.6 检查一个已存在的文件 534
27.5.5 接受从Explorer或File Manager拖来的文件 534
27.5.7 舍去硬返回 535
27.6 Windows注册表 537
27.7 初始化文件 538
27.7.1 预定义注册表关键字 538
27.7.2 注册表关键字和值 539
27.7.3 应用程序状态信息 539
27.7.4 注册表函数 540
27.8 样本程序(WALLFLIP.EXE) 541
27.8.1 应用程序头文件(WALLFLIP.H) 541
27.8.2 类CWallFlipApp 542
27.8.3 类CWallFlipDlg( ) 546
27.9 小结 549
第6部分 高级Windows编程 552
28.1.1 创建一个进程 552
第28章 进程与线程 552
28.1 进程 552
28.1.2 关闭进程 553
28.2 线程 554
28.2.1 线程类型 554
28.3 Win32中的多任务 554
28.5 CWinThread类 555
28.5.1 CWin Tbread类结构 555
28.4 MFC下的多线程 555
28.5.2 CWin Thread数据成员 557
28.5.3 CWin Thread类方法 557
28.5.4 全局线程帮助程序函数 558
28.5.5 线程调度 559
28.6 同步对象 560
28.6.1 CSingleLock类 560
28.6.2 CMultiLock类 561
28.6.3 CSyncObject类 561
28.6.5 CEvent类 562
28.6.4 CCriticalSection类 562
28.6.6 CMutex类 563
28.7 使用CMutex对象 563
28.8 样本程序(CURVES.EXE) 564
28.7.1 CSetnaphore类 564
28.8.1 CCurveThread类 565
28.8.2 创建曲线线程 570
28.9 小结 570
29.2 基本异常语法 572
29.1.1 关键字try,throw,catch 572
29.1 处理异常 572
第29章 异常和异常处理 572
29.2.1 异常保护你的代码 573
29.3 未处理的异常 574
29.3.1 异常中的清除 574
29.4 MFC异常 575
29.4.1 CException类 576
29.4.2 CArchiveException类 576
29.4.3 CDaoException类 577
29.4.4 CDBException类 577
29.4.5 CFileException类 578
29.4.6 CMemoryException类 579
29.4.7 CNotSupportedException类 579
29.4.8 COleDispatchException类 579
29.4.11 CUserException类 580
29.4.9 COleException类 580
29.4.10 CResourceException类 580
29.4.12 转换MFC异常到C++异常 581
29.5 小结 582
第30章 动态链接库设计与实现 583
30.1 16位DLL 583
30.2 32位DLL 583
30.2.1 DLL的入口点:DLLMain( )函数 584
30.2.2 使用C语言编写的DLL 585
30.2.3 匹配引入和引出 585
30.2.4 为DLL创建一个应用程序接口 586
30.3 用MFC编写DLL 586
30.3.1 常规型DLL 587
30.3.2 扩展DLLs 587
30.4.1 用C语言创建DSK DLL:DYNLINK1.DLL 588
30.4 样本程序:DLLTESTI.EXE 588
30.4.2 用MFC创建常规DLL:DYNLINK2.DLL 590
30.4.3 用MFC创建扩展DLL:DYNLINK3.DLL 592
30.5 小结 595
第31章 组件对象模型(COM)、OLE和ActiveX 596
31.1 OLE历史的简要回顾 596
31.1.1 OLE1.0版 596
31.1.2 OLE2.0版 596
31.2.1 ActiveX SDK 597
31.2 OLE的特性 597
31.3 组件对象模型(COM) 598
31.3.1 COM接口 598
31.3.2 COM标识符 598
31.4 IUnKnown接口 599
31.4.1 查询接口 600
31.5 IClassFactory接口 601
31.5.1 注册表的作用 601
32.4.2 引用计数 601
31.5.2 分布式组件对象模型(DCOM) 602
31.6 OLE 602
31.6.1 OLE客户机和服务器 603
31.7 MFC和OLE 603
31.7.2 使用接口映像 604
31.8 小结 604
31.7.1 接口映像(Interface Map) 604
第32章 OLE自动化 606
32.1 IDispatch接口 606
32.1.1 VARIANT数据类型 607
32.1.2 IDispatch::Invoke( )方法 608
32.1.4 OLE自动化服务器 609
32.1.3 类型库 609
32.2.2 调度映像(Dispatch Maps) 610
32.2 MFC和OLE自动化 610
32.2.1 MFC调度(Dispatch)标识符的分配 610
32.3 OLE自动化服务器和控制器应用程序实例 614
32.3.1 OLE自动化服务器的实现 614
32.3.2 OLE自动化控制器的实现 618
32.4 小结 620
第33章 OLE控件 622
33.1.2 MFC的OLE控件类 622
33.1 OLE控件概述 622
33.1.1 标准OLE控件特征 622
33.1.3 COleControlModule类 623
33.1.4 COleControl类 624
33.1.5 COleControl类结构 624
33.1.6 CPropertyPage类用于自包含的控件 625
33.1.8 事件映像和库存事件 626
33.1.7 属性页数据交换 626
33.2.1 创建一个OLE控件框架 627
33.2 一个OLE控件示例(PANEL3D.OCX) 627
33.2.2 测试框架控件 629
33.3 向框架中增加功能 630
33.3.1 自定义项目资源 631
33.3.2 属性页对话资源 631
33.3.4 CPanel3dCtrl类接口 634
33.3.3 CPanel3dCtrl类 634
33.3.5 实现CPanel3dCtrl类 636
33.3.6 CPanel3dPropPage类 641
33.3.7 测试控件 641
33.4 在一个样本程序中使用新控件 641
33.4.1 把Panel3d控件添加到VB项目中 642
34.1.1 超文档概念 649
649
34.1.2 Windows帮助超文档 650
34.2 帮助项目文件(.HPJ) 651
34.2.1 定义Help项目文件段 651
34.3 多格式文本文件(.RTF) 657
34.3.1 使用Windows下的Word 657
34.3.2 专用脚注符号 657
34.4 交互式位图:分段超图形(.SHG) 658
34.4.1 使用热点编辑器(SHED) 659
34.4.2 通过引用来包含位图 662
34.5 目录(Content)文件(.CNT) 662
34.6 使用WinHelp宏和Windows动态链接库DLL 663
34.8.1 HELPINFO结构 664
34.8 上下文相关的Help 664
34.7 在MFC中设置Help文件名 664
34.9 直接调用WinHelp 665
34.10 样本程序:一个联机Help样本程序(HELP1.EXE) 666
34.10.1 映像Help主题到MFC应用程序构件 667
34.10.2 一个示例Help项目文件(HELP1.HPJ) 668
34.10.3 样本应用程序HELP1的结构和实现 670
34.11 小结 673
第7部分 Windows通信程序设计 675
第35章 通信概念及实现途径 675
35.1 通信技术背景 675
35.1.1 网络 675
35.1.2 客户机/服务器系统 676
35.1.3 调制解调器 676
35.2.2 Windows Sockets(WinSock) 677
35.2 Windows通信概述 677
35.2.1 商业工具 677
35.2.3 Win32 Internet(WinInet)API 678
35.2.4 微软的因特网客户机/服务器的结构 678
35.2.5 因特网服务器API(ISAPI) 679
35.2.6 ActiveX控件 679
35.2.7 Messaging API(MAPI) 679
35.3 通过代码签名的因特网的安全性 680
35.3.1 涉及的安全性问题 680
35.3.2 签暑你的代码 681
35.3.3 考虑价格因素 681
35.4 小结 682
36.1.1 IP协议 683
36.1.2 IP地址 683
36.1 因特网协议集 683
第36章 用WinSock通 683
36.1.3 主机名 685
36.1.4 数据报,端口和套接字 685
36.2 Windows套接字概述 686
36.2.1 建立套接字 686
36.2.2 套接字结构 686
36.2.3 伯克利套接字规范的Windows扩展 687
36.3 MFC中的Windows Sockets 689
36.3.1 CAsyncSocket类 689
36.3.2 CAsyneSocket类方法 689
36.3.3 创建和使用CAsyncSocket对象 690
36.3.5 CSocket类方法 691
36.3.4 CSocket类 691
36.3.6 创建CSocket对象 692
36.3.7 使用CSocket对象 692
36.4 小结 692
第37章 WinInet API和MFC WinInet类的使用 693
37.1 WinInet API介绍 693
37.1.1 使用 WinInet API的好处 693
37.1.2 TCP/IP和Windows Sockets 693
37.1.3 接口友好 694
37.1.4 最新的API和安全保证(Safe Bet) 694
37.1.5 熟悉的编程接口 694
37.1.6 支持多线程 694
37.1.7 数据缓存的支持 694
37.2 句柄和函数 694
37.3 通用WinInet函数 695
37.4 WinInet FTP函数 696
37.5 WinInet Gopher函数 697
37.6 WinInet HTTP函数 697
37.7 样本程序:RAWHTML.EXE 698
37.7.1 CRawHtmlApp类 698
37.7.2 CRawHtmlDlg对话框类和头文件HTMLDLG.H 699
37.7.3 CRawHtmlDlg类的具体实现(HTMLDLG.CPP) 700
37.7.4 初始化WinInet会话 705
37.7.5 获取协议句柄 706
37.7.6 打开文件 707
37.7.7 查询信息 709
37.7.8 读文件数据 710
37.8.2 连接类 711
37.8 MFC因特网扩展类 711
37.8.1 CInternetSession类 711
37.8.3 因特网文件类 712
37.8.4 全局MFC因特网函数 713
37.9 RAWHTML的修正样本程序:RAWHTM2.EXE 713
37.10 小结 716
第38章 创建ActiveX控件以激活Web页 718
38.1 ActiveX控件概述 718
38.1.1 OLE控件96规范 718
38.2 ActiveX控件样本程序:JIGGLER.OCX 719
38.2.1 创建一个OLE控件框架 719
38.2.2 测试框架控件 720
38.3 给框架添加功能 720
38.3.2 属性页对话框资源 721
38.3.1 自定义项目资源 721
38.3.3 CJigglerCtrl类 722
38.3.4 CJigglerCtrl类界面(JIGGLERC.H) 722
38.3.5 实现CJigglerCtrl类 723
38.3.6 CJigglerPropPage类 730
38.4 在OLE Control Test Container中测试控件 732
38.5 在一个简单网页上使用新控制 732
38.5.1 创建一个简单的HTML网页 733
38.5.2 将Jiggler控件加入网页 734
38.5.3 用VBScript对Jiggler控件进行编程 738
38.6 小结 741
39.1.1 客户机应用程序 742
第39章 用MAPI创建通邮的应用程序 742
39.1 消息应用程序编程接口(MAPI) 742
39.2 两种较高级的选择:简单的MAPI和CMC 743
39.2.1 简单的MAPI 743
39.2.2 公共消息调用(CMC) 743
39.2.3 MapiMessage结构 744
39.2.4 MapFileDesc结构 745
39.3 MFC中有限的MAPI功能 745
39.4 CDocument连接 746
39.4.1 做MAPI的MFC方法 746
39.4.2 CDocument::OnFileSendMail( )方法 746
39.5 样本程序:MAPII.EXE 750
39.6 小结 753
附录A数据类型与Windows句柄 754
A.1 简单数据类型(Simple Data Types) 754
A.2 结构化的数据类型(Structured Data Types) 755
A.3 句柄(Handles) 755
附录B 窗口类与窗口样式 757
B.1 窗口类结构 757
B.2 窗口类样式 759
B.3 窗口样式 760
B.3.1 重叠式窗口 761
B.3.2 弹出式窗口 761
B.3.3 子窗口 762
B.4窗口样式分组 762
B.4.2 非客户域组件样式 764
B.4.1 窗口边界样式 764
B.4.3 初始窗口状态样式 765
B.4.4 父与子窗口样式 765
B.4.5 对话框样式 765
B.4.6 扩展的窗口样式 766
附录C Windows 95微标要求 767
C.1 概述(Overview) 767
C.2 对所有应用程序类型的要求 767
C.3 基于文件应用程序的要求 768
C.4 实用应用程序的要求 769
C.4.1 实用应用程序的建议 769
C.5 编译器与其他开发工具的要求 770
D.2 迁移阶段 771
D.1 MFC迁移包 771
附录D 从C到MFC的迁移 771
D.2.1 准备 772
D.2.2 阶段1:迁移WinMain( )和WndProc( )代码 772
D.2.3 阶段2:删除处理消息的开关语句 773
D.2.4 阶段3:用MFC更进一步集成 773
附录E 匈牙利记法 775
E.1 匈牙利基类型和前缀(Hungarian Base Types and Prefixes) 775
附录F MFC中Windows公共控件的通知消息 777
F.1 Windows公共控件的通知 777
F.2 通知消息结构 777
F.3 通知过程的概述 777
F.3.1 更好地处理通知的方案 778
F.4 用ON_NOTIFY_RANGE指定通知域 779