第1部分 Visual C++基础 1
1.1 Visual C++6.0的新特性 2
第1章 Visual C++入门 2
1.2 HelloWorld1程序 3
1.3 HelloWorld2程序 6
1.4 HelloWorld3 ATL控件 7
1.5 小结 10
2.1 初识Visual Studio集成开发环境 11
第2章 Visual Studio集成开发环境 11
2.2 创建第一个项目 12
2.3.1 查看当前快捷键 15
2.3 自定义集成开发环境 15
2.3.2 增加、编辑或删除快捷键 16
2.4.1 显示和隐藏工具栏 17
2.4 使用工具栏 17
2.5 小结 18
2.4.2 自定义工具栏 18
3.1 调试程序应该具备的性能 19
第3章 应用程序的调试 19
3.2.1 调试前的准备 20
3.2 Visual Studio集成调试程序 20
3.2.2 在运行时使用调试程序 22
3.2.3 调试窗口 23
3.2.4 使用断点和单步调试功能 25
3.2.6 在调试过程中使用Threads和Exceptions对话框 28
3.2.5 使用DataTip信息以及QuickWatch窗口 28
3.3.1 使用消息框提高调试速度 29
3.3 简单调试技巧 29
3.3.3 使用断言 30
3.3.2 调试输出 30
3.3.5 检测内存泄漏与CMemoryState类 31
3.3.4 对象转储 31
3.4 远程调试 32
3.3.6 使用MFC跟踪 32
3.5.2 调试Windows NT服务 34
3.5.1 编辑并继续调试 34
3.5 即时调试 34
3.6 小结 35
4.1 优化代码 36
第4章 改善应用程序性能 36
4.2 配置文件简介 38
4.2.2 了解Profiler的运行情况 39
4.2.1 应用程序配置文件的基本知识 39
4.2.3 配置文件类型 40
4.3 启用生成配置文件功能 41
4.2.4 设置高级配置文件设置 41
4.3.2 选择需要生成配置文件的函数 42
4.3.1 从开发环境控制配置文件的生成 42
4.3.3 PREP程序 43
4.3.5 生成函数范围配置文件 45
4.3.4 生成函数计时配置文件 45
4.3.7 生成行范围配置文件 46
4.3.6 行配置文件的选项 46
4.3.9 从配置文件导出数据 47
4.3.8 合并配置文件输出 47
4.3.11 全局信息记录 48
4.3.10 分析配置文件数据 48
4.3.12 局部信息记录 49
4.3.13 分析配置文件的统计数据 50
4.3.16 生成组件或ActiveX控件的配置文件 51
4.3.15 生成动态链接库的配置文件 51
4.3.14 使用Excel处理Profiler输出 51
4.3.18 生成多线程应用程序的配置文件 52
4.3.17 生成内联代码的配置文件 52
4.3.19 生成应用程序性能的配置文件 53
4.3.20 生成Windows NT服务的配置文件 54
4.4 小结 55
5.1 Spy++ 56
第5章 杂项工具 56
5.2 自定义Tools菜单 58
5.4 浏览类 60
5.3 有关Tools菜单的其他操作 60
5.5 浏览MFC源代码 62
5.6 小结 63
第2部分 Windows编程基础 65
6.1 什么是MFC 66
第6章 MFC编程概述 66
6.3 MFC的优势 67
6.2 MFC的设计原理 67
6.4.1 文件服务 69
6.4 MFC层次结构设计 69
6.3.1 众多MFC特性 69
6.3.2 可扩展的体系结构 69
6.4.2 窗口 70
6.4.3 图形 72
6.5 MFC的局限 73
6.4.4 数据库支持 73
6.6 小结 74
7.1 创建和编辑菜单 75
第7章 菜单 75
7.1.1 创建菜单 76
7.1.2 MFC中的菜单消息 77
7.2.1 检查键盘输入 78
7.2 快捷键 78
7.2.2 定义快捷键 79
7.2.3 选择适当的快捷键 80
7.2.4 多个快捷键表 81
7.3.1 菜单命令范围 83
7.3 动态更改菜单 83
7.3.3 更改现有弹出菜单 84
7.3.2 在运行时更改菜单 84
7.3.4 永久及临时句柄映射 86
7.4 快捷菜单 87
7.5 小结 88
8.2 鼠标输入 89
8.1 输入及系统状态 89
第8章 鼠标和键盘 89
8.2.1 创建鼠标消息处理程序 90
8.2.2 屏幕坐标和窗口坐标之间的转换 91
8.3 创建处理鼠标事件的MFC程序 92
8.3.2 更改光标 98
8.3.1 非客户鼠标事件 98
8.4 创建更改鼠标指针的MFC演示程序 99
8.4.1 捕获鼠标 101
8.4.2 限制鼠标移动 102
8.5.1 物理键盘 103
8.5 键盘输入 103
8.5.2 回显键盘焦点 104
8.6 小结 109
9.1.1 图形类型 110
9.1 图形设备接口 110
第9章 图形 110
9.1.2 GDI设备类型 111
9.2.1 设备上下文绘图属性 112
9.2 设备上下文 112
9.2.2 WM_PAINT消息 114
9.2.4 触发WM_PAINT消息 115
9.2.3 绘制坐标 115
9.2.5 响应WM_PAINT之外的消息进行绘制 116
9.3.1 GDI颜色支持 117
9.3 处理文本 117
9.3.2 文本颜色 118
9.3.3 对齐文本 119
9.4.2 将对象选入设备上下文 120
9.4.1 什么是字体 120
9.3.4 调整文本 120
9.4 字体 120
9.4.4 选择非常备字体 121
9.4.3 选择常备字体 121
9.5.1 钢笔 124
9.5 钢笔和画刷 124
9.5.2 画刷 126
9.6 映射模式 128
9.7.1 文本绘图函数 129
9.7 光栅操作 129
9.7.2 文本坐标的计算 131
9.8 剪取区域 134
9.9 小结 135
10.1 位图内存和显存 136
第10章 位图、调色板、DIB以及双缓存 136
10.2 创建CBitmap对象 137
10.3 加载和设置位图内容 139
10.4 将CBitmaps绘制到屏幕上 140
10.5 光栅操作 143
10.6 BlitDemo程序 145
10.7 调色板和颜色 151
10.7.1 逻辑调色板 153
10.7.2 调色板事件 154
10.8.1 设备无关位图文件剖析 156
10.8 设备无关位图 156
10.7.3 SetSystemPaletteUse()函数 156
10.8.2 CDib类 158
10.8.3 ShowDIB演示程序 163
10.9 双缓存 166
10.10 小结 168
11.2.1 抛出异常 169
11.2 异常处理语法 169
第11章 MFC异常处理 169
11.1 结构化异常处理 169
11.2.2 捕获异常 170
11.3.1 处理错误代码 171
11.3 错误处理技巧 171
11.3.2 在正确位置中处理错误 172
11.3.3 提高代码可读性 173
11.3.4 从构造函数中抛出异常 174
11.4.1 创建和删除CException对象 175
11.4 CException类 175
11.4.2 从CException对象中检索错误信息 176
11.4.3 捕获多种异常类型 177
11.5.1 CFileException类 178
11.5 定义CException派生类 178
11.5.2 CFileException演示程序 180
11.5.3 自定义CException派生类 182
11.6 高级异常处理技术 185
11.6.1 确定应该捕获异常的函数 186
11.6.2 放置在try块中的代码 187
11.6.3 放置在catch块中的代码 188
11.6.4 从虚函数中抛出异常 189
11.7 小结 192
12.2 创建控件 193
12.1 控件的背景 193
第12章 控件 193
12.2.1 CButton类 195
12.2.2 CListBox类 197
12.2.3 CEdit类 200
12.2.4 CStatic类 203
12.2.5 CScrollBar类 205
12.2.6 CComboBox类 207
12.3 Mini Editor程序 209
12.4.1 添加一个键盘接口 210
12.4 高级控件编程 210
12.4.3 位图按钮 211
12.4.2 修改控件行为 211
12.4.4 更改控件的颜色 213
12.5 小结 214
13.1.1 对话框模板 215
13.1 使用对话框编辑器 215
第13章 模态和非模态对话框 215
13.1.2 创建新的对话框模板 216
13.1.3 编辑对话框模板 217
13.2.1 模态与非模态对话框 220
13.2 CDialog类 220
13.1.4 测试对话框 220
13.2.2 使用ClassWizard创建CDialog派生类 222
13.3.2 DoDataExchange和UpdateData函数 223
13.3.1 创建DDX变量 223
13.3 对话框数据交换和校验 223
13.4.1 编辑演示程序的对话框 225
13.4 AddressBook演示程序 225
13.4.2 CContact类 226
13.4.3 重写OnInitDialog函数 227
13.4.4 处理WM_DESTROY消息 228
13.4.5 显示数据 229
13.4.7 建立和测试演示程序 230
13.4.6 处理按钮通知 230
13.5.1 创建控件类 231
13.5 在对话框中派生控件类 231
13.5.2 AddressBook演示程序:CAutoCompleteComboBox 232
13.6 串行化 234
13.6.3 从磁盘中读取数据 235
13.6.2 实现Serialize()虚函数 235
13.6.1 使每个类可串行化 235
13.6.5 给AddressBook演示程序添加串行化 236
13.6.4 将数据保存到磁盘 236
13.7 小结 241
第14章 属性表和属性页 242
14.1.2 创建CPropertyPage类 243
14.1.1 创建属性页资源 243
14.1 CPropertySheet和CPropertyPage类 243
14.1.4 创建和显示非模态的CPropertySheet 244
14.1.3 创建和显示模态的CPropertySheet 244
14.1.5 在一个现有对话框内创建和显示属性表 245
14.2 模态属性表演示程序 246
14.3.1 删除标准按钮 248
14.3 属性表和属性页提示和技巧 248
14.3.2 重定位标准按钮 249
14.3.4 禁用选项卡 250
14.3.3 更改标准按钮的标题 250
14.3.5 重新启用属性页 253
14.3.6 动态设置CPropertyPage选项卡标题 255
14.3.7 更改选项卡的字体 257
14.3.8 使用CPropertyPage选项卡助记符 257
14.4 小结 259
15.1.1 创建字符串 260
15.1 CString类 260
第15章 数据I/O 260
15.1.2 访问字符串数据 261
15.1.3 比较运算 262
15.1.4 抽取子串 263
15.2 StringDemo程序 264
15.1.5 搜索 264
15.3 CFile类 270
15.4 FileDemo程序 273
15.6 CompressDemo程序 280
15.5 CCompressedFile类 280
15.7.1 CCompressedFile类函数 282
15.7 数据压缩 282
15.7.2 CompressDemo内幕 284
15.8.1 CSerial类 286
15.8 用于串行通信的CSerial类 286
15.9.3 常用注册表键 288
15.9.2 预定义的注册表键 288
15.9 CRegistry类 288
15.9.1 注册表值 288
15.9.4 CRegistry类的使用 289
15.10 剪贴板 291
15.11 小结 293
16.1.2 使用Windows API播放波形文件 294
16.1.1 CWave类简介 294
第16章 声音 294
16.1 播放录制好的声音 294
16.1.3 CWave类函数 296
16.2 WaveDemo程序 297
16.3.1 什么是MIDI 300
16.3 播放MIDI文件 300
16.4 MIDIDemo程序 301
16.3.3 CMidi类函数 301
16.3.2 CMidi类简介 301
16.5.1 CCDAudio类库简介 305
16.5 音乐CD 305
16.5.2 媒体控制接口 306
16.6 CDPlayer程序 307
16.5.3 CCDAudio类函数 307
16.7 小结 313
17.1.1 用WM_TIMER设置计时器 314
17.1 计时器 314
第17章 计时器和Onldle循环处理 314
17.1.2 用一个回调过程设置计时器 316
17.2 时钟演示程序 317
17.3 CWinApp的OnIdle能力 323
17.4 OnIdleDemo程序 325
17.5 小结 328
第3部分 体系结构 329
18.1.1 分配页 330
18.1 进程私有内存 330
第18章 内存管理 330
18.1.2 编译器内存分配 333
18.1.3 Win32私有堆 336
18.2 共享内存 339
18.2.1 内存映射文件I/O 340
18.2.2 动态分配共享页 344
18.2.3 静态分配共享页 346
18.3 小结 347
19.1 文档/视图设计 348
第19章 文档、视图和单文档界面 348
19.2.1 在应用程序内声明文档类 349
19.2 CDocument类 349
19.2.2 CDocument的成员函数 351
19.2.4 重写虚文档函数 352
19.2.3 文档和消息处理 352
19.2.5 使用复杂文档数据 353
19.2.6 使用CCmdTarget和CDocItem的好处 355
19.3.1 应用程序如何管理文档和视图 357
19.3 InitInstance函数对文档的重要性 357
19.3.4 文档模板资源 358
19.3.3 框架窗口 358
19.3.2 CSingleDocTemplate类 358
19.3.6 分离字符串资源 359
19.3.5 字符串资源如何影响文档模板 359
19.3.7 常备视图资源 360
19.3.10 使用多个模板 361
19.3.9 模板的高级用法 361
19.3.8 考虑文档模板生存周期 361
19.4.1 声明视图类 363
19.4 CView类 363
19.3.11 销毁用AddDocTemplate()成员函数添加的文档 363
19.4.2 分析CView成员函数 364
19.4.5 CForm视图与基于对话框的应用程序 366
19.4.4 CView类的MFC派生变形 366
19.4.3 视图和消息 366
19.4.7 AfxGetMainWnd()的角色 367
19.4.6 返回框架窗口 367
19.5 HexView应用程序 368
19.6 小结 374
第20章 多文档界面应用程序的布局 375
20.2 CDocument类 376
20.1 文档/视图模型 376
20.3.1 使用多文档类型 377
20.3 管理文档、视图和框架窗口的复杂组合 377
20.3.2 使用文档的多个视图 378
20.3.4 CMDIChildWnd类 380
20.3.3 CMDIFrameWnd类 380
20.3.5 CMultiDocTemplate类 381
20.3.7 进一步认识MDI应用程序 382
20.3.6 使用CDocument类的开销 382
20.4 PaintObj程序 383
20.5 拆分窗口 390
20.5.2 特定于CSplitterWnd类的内容 391
20.5.1 区分拆分窗口 391
20.5.3 动态拆分器 392
20.5.5 CRuntimeClass对象 394
20.5.4 在动态窗格中使用不同的视图 394
20.5.6 对与多个文档关联的视图使用拆分器 395
20.5.9 了解共享滚动条 396
20.5.8 创建静态拆分器 396
20.5.7 静态拆分器 396
20.6 Dynsplit程序 398
20.5.11 拆分器的性能问题 398
20.5.10 确定实际的和理想的尺寸 398
20.7 为窗口定义子类 403
20.7.1 使用MFC定义窗口子类 404
20.8 小结 405
20.7.2 文档/视图体系结构的替代方案 405
21.1 Windows API打印机支持 407
第21章 打印和打印预览 407
21.1.1 打印机信息 410
21.2 PortLand程序 411
21.1.2 理解字符特征的重要性 411
21.3 使用MFC 413
21.3.2 MFC打印序列 414
21.3.1 打印过程中的任务和框架的角色 414
21.3.5 取代视图类函数和分页 417
21.3.4 打印协议 417
21.3.3 MFC默认打印方式 417
21.3.7 打印机页和文档页 418
21.3.6 CPrintInfo类 418
21.3.8 实现分页 419
21.3.9 添加帮助函数 421
21.3.10 打印时分页 423
21.3.13 扩大打印的图像 424
21.3.12 为打印分配GDI资源 424
21.3.11 页眉和页脚的打印 424
21.4.2 修改打印预览 425
21.4.1 打印预览过程 425
21.4 打印预览体系结构 425
21.4.3 增强应用程序的打印预览 426
21.4.4 CPrintDialog类 427
21.5 HexViewMDI程序 428
21.6 小结 432
22.3 RunModalLoop()函数 433
22.2 理解模态循环 433
第22章 高级Windows用户界面的MFC 433
22.1 更多的控制 433
22.5 终止模态循环 436
22.4 模态循环参数 436
22.6 生成模态应用程序 437
22.7.1 添加处理程序 438
22.7 创建和关闭模态窗口 438
22.7.2 简单的模态应用程序 440
22.8 改进模态窗口 441
22.9 在透明客户区域绘制透明位图 444
22.9.1 绘制位图 445
22.9.2 确定粘贴位图的位置 448
22.9.4 BITMAP结构 449
22.9.3 兼容的设备上下文 449
22.9.5 把所有图片叠加在一起 451
22.10 小结 453
22.9.6 确保用户的注意力 453
23.1.1 创建状态栏 454
23.1 创建和使用状态栏 454
第23章 状态栏与工具栏 454
23.1.2 自定义状态栏 455
23.2 创建和控制工具栏 458
23.2.2 创建和初始化工具栏 459
23.2.1 MFC控件栏 459
23.3 ReBar控件 464
23.4 小结 465
第24章 树视图和列表视图控件 466
24.1.1 树视图控件基础知识 467
24.1 CTreeCtrl类 467
24.1.2 CTreeCtrl控件 468
24.1.3 CtreeCtrl演示程序 475
24.2.2 CListCtrl控件 480
24.2.1 列表视图基础知识 480
24.2 CListCtrl类 480
24.3 小结 485
25.1 线程 486
第25章 线程 486
25.1.1 创建工作者线程 487
25.1.3 创建用户界面线程 488
25.1.2 线程函数 488
25.1.6 终止线程 490
25.1.5 使线程睡眠 490
25.1.4 挂起和继续执行线程 490
25.1.7 从一个线程中终止另一个线程 491
25.2 在线程之间共享MFC对象 494
25.1.8 进程优先级类 494
25.4 ThreadDemol程序 497
25.3 在多线程应用程序中使用C运行函数 497
25.5 小结 501
第4部分 数据库编程 503
26.1 ODBC定义和数据库术语 504
第26章 ODBC 504
26.2.1 配置ODBC 505
26.2 ODBC的实现 505
26.2.2 连接到数据源 506
26.2.4 准备与执行SQL请求 508
26.2.3 查询数据和数据源 508
26.2.5 检索数据 509
26.3 使用ODBC获取数据 510
26.2.6 断开与数据源的连接 510
26.3.2 修改ODBCDemo对话框 511
26.3.1 为Visual C++项目添加对ODBC的支持 511
26.3.3 添加初始化和数据库代码 512
26.4 使用ODBC动态查询数据源 517
26.4.1 CODBCDynamic类声明 518
26.4.2 CODBCDynamic类如何工作 519
26.4.3 使用CODBCDynamic类 524
26.5 小结 525
27.1 CDatabase对象 526
第27章 MFC数据库类 526
27.2 CRecordset对象 529
27.2.2 打开一个记录集 533
27.2.1 构造一个记录集 533
27.2.4 筛选记录 534
27.2.3 使用RFX(记录字段交换)读写数据 534
27.2.5 排序返回的记录集中的记录 536
27.2.7 保存记录 537
27.2.6 在结果集合中移动 537
27.3.2 为演示程序创建用户界面 538
27.3.1 添加对MFC数据库类的支持 538
27.2.8 删除记录 538
27.3 使用MFC数据库类 538
27.3.3 添加工具类封装用户数据 539
27.3.6 修改对话框的实现文件 540
27.3.5 修改对话框的头文件 540
27.3.4 为表UserMaster创建CRecordset类 540
27.4 参数化记录集与查询 546
27.4.1 为演示程序创建用户界面 547
27.4.4 为应用程序添加查找功能 548
27.4.3 修改CRecordset类以接受参数 548
27.4.2 创建UserMaster记录集 548
27.4.7 演示数据库 550
27.4.6 创建参数化查询 550
27.4.5 建立应用程序 550
27.4.8 创建权限记录集 551
27.5 小结 555
28.1.1 DAO层次结构 556
28.1 DAO概览 556
第28章 DAO数据库编程 556
28.1.2 DAO的多种内部形式 559
28.2 MFC DAO类 560
28.2.1 CDaoDatabase类 561
28.2.3 CDaoRecordset类 563
28.2.2 CDaoWorkspace类 563
28.2.4 MFC DAO演示程序 572
28.3 小结 581
第5部分 扩展应用程序的功能 583
29.1.1 静态和动态库 584
29.1 动态链接库概述 584
第29章 动态链接库 584
29.2 Visual C++常规DLL 585
29.1.2 加载DLL 585
29.2.1 常规DLL 586
29.2.2 动态加载DLL 587
29.2.4 Windows异常分支 588
29.2.3 动态加载DLL的示例 588
29.2.5 DLL的全局C++对象 594
29.3.1 扩展DLL 600
29.3 MFC扩展DLL 600
29.3.3 AFX_EXT_CLASS宏 601
29.3.2 通过MFC扩展DLL导出类 601
29.3.6 编写在DLL中封装文档和视图的演示程序 602
29.3.5 导出资源 602
29.3.4 嵌套的MFC扩展DLL 602
29.4 小结 606
30.1 第三方库 607
第30章 添加图像 607
30.2 ImageObject库 609
30.2.1 BMP文件格式 610
30.3 库加载图像 611
30.2.5 TIF文件格式 611
30.2.2 GIF文件格式 611
30.2.3 JPEG文件格式 611
30.2.4 TGA文件格式 611
30.4 显示图像 612
30.5 Display程序 615
30.6 缩放、裁剪和改变颜色深度 617
30.7 从设备上下文中创建图像 619
30.9 保存图像 620
30.8 从剪贴板创建图像 620
30.10 图像处理 622
30.11 ProcessImage程序 624
30.12 小结 631
第6部分 组件对象模型编程 633
31.1.1 自动化服务器 634
31.1 各种ActiveX技术 634
第31章 ActiveX和ActiveX控件设计 634
31.1.4 组件对象(COM)模型对象 635
31.1.3 定义ActiveX控件 635
31.1.2 自动化控制器 635
31.2 ActiveX的功能 636
31.1.6 ActiveX容器 636
31.1.5 ActiveX文档 636
31.3.2 ActiveX控件 637
31.3.1 自动化服务器和控制器 637
31.3 选择ActiveX组件类型 637
31.3.6 创建自己的框架 638
31.3.5 使用ActiveX模板库来创建ActiveX组件 638
31.3.3 COM对象 638
31.3.4 使用MFC来创建ActiveX组件 638
31.4.1 ActiveX自动化服务器 639
31.4 基本ActiveX组件体系结构 639
31.5.2 RegEdit程序 640
31.5.1 MIDL编译器 640
31.4.2 ActiveX控件 640
31.5 建立ActiveX组件需要的支持工具 640
31.5.5 把工具添加到VisualC++开发环境中 641
31.5.4 Ole2View程序 641
31.5.3 Registration Server程序 641
31.6.1 创建基本的控件项目 642
31.6 用MFC创建一个基本ActiveX控件 642
31.6.3 创建方法 645
31.6.2 控件注册 645
31.6.4 属性 650
31.6.5 创建属性页 654
31.6.6 添加事件 657
31.6.7 持久性 658
31.7 标准绘制 660
31.8 小结 662
32.1 创建基本项目 663
第32章 使用MFC创建ActiveX自动化服务器 663
32.1.1 给应用程序添加一个自动化接口 664
32.1.2 注册服务器 667
32.1.3 编写样本服务器的支持代码 668
32.1.4 添加方法 671
32.1.5 给服务器添加属性 675
32.2 产生OLE异常 676
32.2.1 双接口服务器 682
32.2.2 产生双接口OLE异常 688
32.3 用C++进行服务器实例化 693
32.3.1 用C++实例化OLE服务器时的常见问题 694
32.3.2 创建可共享的服务器 695
32.4 小结 698
32.3.3 单一实例服务器 698
33.1 ATL概述 699
第33章 活动模板库 699
33.2 创建ATL控件 700
33.3 将COM对象添加到项目 701
33.4 修改CDoublePend包含文件 702
33.5 实现接口函数 703
33.6 在C++中使用控件 708
33.7.1 转换BSTR 710
33.7 数据类型 710
33.8 在网页中嵌入ActiveX控件 711
33.7.3 在调试器中查看BSTR的内容 711
33.7.2 比较BSTR 711
33.9 小结 712
第7部分 Internet和HTML编程 713
34.1 CInternetSession类 714
第34章 Internet编程 714
34.2 CFtpConnection类 715
34.2.1 从FTP服务器中检索文件 718
34.2.3 其他FTP函数 720
34.2.2 将文件发送给FTP服务器 720
34.2.4 CInternetFile类 721
34.2.5 CFtpFileFind类 722
34.3 FTP程序 723
34.4.2 连接到套接字 731
34.4.1 创建套接字 731
34.4 套接字和CSocket类 731
34.4.3 监听一个连接 733
34.5 Sockets程序 734
34.4.4 读和写数据 734
34.6 SendEmail程序 741
34.7 检索HTTP文件 746
34.8 AutoDialer程序 747
34.9 小结 749
35.1 创建一个CHtmlView项目 750
第35章 CHtmlView类 750
35.2 把项目转换为使用CHtmlView类 751
35.3 导航CHtmlView类 752
35.4 SimpleBrowser程序 753
35.5 MultiBrowser程序 756
35.6 直接使用Web浏览器控件 759
35.8 编写一个阻挡站点的浏览器 761
35.7 编写一个记录导航日志的浏览器 761
35.9 小结 762
36.1 HTML基础 763
第36章 动态HTML 763
36.2 层叠样式表 765
36.2.2 样式表语法 767
36.2.1 全局样式表 767
36.3 简单文件查看器 768
36.4 事件和对象模型 769
36.5 脚本 771
36.6 脚本元素 772
36.7 改变非文本元素 775
36.8 在文档加载时运行脚本 776
36.9 编写对话框脚本 779
36.10 小结 781
第8部分 高级Visual Studio技术 783
第37章 编写Visual Studio脚本 784
37.1 Visual Studio宏 784
37.1.1 Quick Macros宏 784
37.2 创建VBScript宏 786
37.2.1 VBScript宏 788
37.2.2 编辑VBScript宏 789
37.2.3 创建一个空宏 789
37.3 使用VBScript宏 791
37.3.1 加载宏文件 791
37.3.2 运行VBScript宏 792
37.3.3 把宏分配给工具栏 792
37.3.4 把宏分配给按键 793
37.4 VBScript 794
37.4.1 VBScript编程 794
37.4.4 函数和过程 795
37.4.3 常量设置 795
37.5 Developer Studio对象模型 795
37.4.2 变量设置 795
37.5.1 访问该对象模型 796
37.5.2 使用Application对象 796
37.6 样本应用程序 798
37.6.1 运行样本宏 798
37.6.2 样本宏 799
37.7 小结 806
第38章 编写自定义AppWizard 807
38.1 AppWizard的内部工作 807
38.1.1 AppWizard管理器 808
38.1.2 CCustomAppWiz类和Dictionary(字典) 808
38.2 创建自定义AppWizard 811
38.3.1 创建SDIAutomationWiz演示项目 812
38.3.2 定义CCustomAppWiz类 812
38.3 预置项目默认设置演示程序 812
38.3.3 使用宏字典 813
38.4 高级自定义AppWizard 814
38.4.1 添加自定义对话框 814
38.4.2 创建自己的模板 816
38.4.3 更改newproj.inf文件 818
38.4.4 更改ClassWizard文件 819
38.4.5 更改AppWizard模板 819
38.4.6 更改CONFIRM.INF文件 822
38.4.7 为永久性的宏使用注册表 823
38.4.8 更改CAboutWizAppWiz类以使用注册表 823
38.5 小结 826