8.3.4调整文本 21 1
目 录 1
22.2.7遍历记录集 61 1
15.4理解CPrintDialog类 43 1
13.2.3使用ClistCtrlWithCustomDraw类 38 1
19.4.5对CustomDataTransfer示例程序进行测试 53 1
20.4.4添加初始化程序和数据库代码 55 1
前言 1
22.3.1初始化连接 61 3
第1部分用户接口 5
1.1初步了解新的Visual Studio环境 7
第1章编写第一个MFC应用程序 7
1.2创建第一个Visual Studio项目 10
11.1.2交换数据和状态 3 11
1.2.1研究不同的视图 12
4.3.3更改现有弹出菜单 1 12
4.3.2在运行时更改菜单 1 12
1.2.2添加按钮事件处理程序 14
1.2.3使用Dialog Editor和Toolbox 16
1.2.4使用动态数据交换 18
1.3更正建立错误 19
1.4在Visual Studio 中进行调试 20
1.4.2步进查看MFC源代码 21
1.4.1设置断点 21
1.5使用MFC消息处理程序 25
1.6处理子事件 28
1.7重载基类函数 29
1.8小结 30
第2章 文档、视图和SDI 31
2.1文档/视图设计 31
2.2 CDocument类 33
2.2.1声明一个文档类 33
5.3.2 Windows逻辑键盘 1 35
2.2.2 CDocument的成员函数 35
2.2.4取代虚文档函数 36
2.2.3文档和消息处理 36
2.2.5使用复杂文档数据 37
2.2.6 CCmdTarget和CDocItem 40
2.3 InitInstance函数 41
2.3.1管理文档和视图 42
2.3.3文档模板资源 43
2.3.2框架窗口简介 43
2.3.4字符串资源和文档模板 44
2.3.5常备视图资源 46
2.3.6文档模板的生命周期 46
2.3.7模板的高级用法 47
2.3.9未正式公开的CDocManager类 47
2.3.8使用多个模板 47
2.4.1声明一个视图类 49
2.4 CView类 49
2.3.10销毁用AddDocTemplate成员函数添加的文档 49
2.4.2分析Cview成员函数 50
2.4.4 CView类和MFC的派生变形 52
2.4.3使用视图和消息 52
2.4.6返回框架窗口 53
2.4.7框架窗口 OnCreate函数 53
2.4.5 CForm视图与基于对话的应用程序的对比 53
2.5.1去掉文档名 55
2.5控制标题栏文本 55
2.5.2格式化标题栏文本 56
2.6.1打开和读取文件 57
2.6 HexViewer SDI应用程序 57
2.6.2视图编码 61
2.7小结 65
3.1比较MDI和SDI的结构 67
第3章MDI应用程序 67
3.2.1使用多文档类型 68
3.2文档、视图和框架窗口的组合 68
3.2.2使用文档的多个视图 69
3.2.3了解CMDIFrameWnd类 70
3.2.4了解CMDIChildWnd类 71
3.2.5了解CMultiDocTemplate类 72
3.2.6使用CDocument类的开销 73
3.2.7MDI应用程序 73
3.3 PaintObj程序 74
3.4介绍拆分窗口 81
3.4.1 区分拆分窗口 82
3.4.2特定于CSplitterWnd类的内容 82
3.4.3详细讲解动态拆分 83
3.4.4在动态窗格中使用不同的视图 85
3.4.5使用CruntimeClass对象 85
3.4.6对与多个文档关联的视图使用拆分器 86
3.4.7使用静态拆分器 87
3.4.8创建静态拆分器 87
3.4.9了解共享滚动条 88
3.4.1 0确定实际的和理想的尺寸 89
3.5 Dynsplit程序 89
3.4.11 拆分器的性能考虑 89
3.6小结 93
4.1创建和编辑菜单 95
第4章菜单 95
4.1.1定义菜单 97
4.1.2编写菜单事件处理程序 100
4.1.3编写一些简单的菜单代码 103
4.1.4组合菜单处理程序 104
4.2加速键 105
4.2.1检查键盘输入 105
4.2.3创建一个加速键表资源 106
4.2.2定义加速键 106
4.2.5选择适当的加速键 107
4.2.4创建加速键菜单提示 107
4.2.6原始Windows API加速键支持 109
4.2.7 C将新加速键表连接到窗口类 110
4.3.1菜单命令范围 111
4.3动态更改菜单 111
4.3.4永久和临时句柄映射 114
4.4上下文菜单 116
4.5小结 117
5.1关于事件 119
第5章鼠标和键盘处理 119
5.2鼠标输入 120
5.2.1创建鼠标消息处理程序 120
5.2.2在屏幕坐标和窗口坐标之间转换 120
5.2.3创建处理鼠标事件的MFC程序 122
5.2.4非客户鼠标事件 128
5.2.5更改鼠标光标 128
5.2.6创建更改鼠标指针的MFC演示程序 130
5.2.7捕获鼠标 132
5.2.8限制鼠标移动 133
5.3.1物理键盘 134
5.3键盘输入 134
5.3.3可打印字符消息 136
5.3.4回显键盘焦点 137
5.4小结 142
6.1.1默认状态栏行为 143
第6章 状态栏和工具栏 143
6.1创建和控制状态栏 143
6.1.2对齐状态栏 145
6.1.3给状态栏添加文本窗格 146
6.1.4在对话框上放置状态栏 147
6.1.5状态栏演示程序 151
6.1.6给状态栏添加进度条 153
6.2创建和控制工具栏 162
6.2.2创建和初始化一个工具栏 162
6.2.1 MFC控件栏 162
6.2.3停靠和浮动 164
6.2.5添加工具提示和浮动文本 164
6.2.4显示和隐藏工具栏 164
6.2.6添加非按钮控件 165
6.2.8使用ReBar控件 166
6.2.7更新非按钮控件 166
6.2.9添加ReBar支持 167
6.3小结 168
第7章树视图和列表视图控件 169
7.1.1树视图控件基础知识 170
7.1树视图控件 170
7.1.2 CTreeCtrl类 171
7.1.4处理CTreeCtrl消息 172
7.1.3创建CTreeCtrl对象 172
7.1.5在CTreeCtrl中插入项 177
7.1.6编辑标签 178
7.1.7在编辑CTreeCtrl项的同时处理Esc和Enter键 181
7.1.8上下文菜单 182
7.1.9展开和折叠树控件分支 184
7.1.10 CTreeCtrl演示程序 185
7.2.1 CListCtrl类 192
7.2列表视图控件 192
7.2.2创建和关联CImageList对象 193
7.2.3设置和更改视图风格 194
7.2.4给CListCtrl中添加列 194
7.2.5调整列表视图的列的大小 196
7.2.6插入列表视图项 198
7.3小结 198
第8章图形设备界面编程 199
8.1介绍图形设备界面 199
8.1.1图形类型 200
8.1.3 GDI设备类型 201
8.1.2 GDI设备 201
8.2设备上下文 202
8.2.1 DC绘图属性 203
8.2.2 WM_PAINT消息 205
8.2.3绘制坐标 205
8.2.4触发WM_PAINT 206
8.2.5 响应WM_PAINT以外的消息进行绘图 207
8.3操纵文本 208
8.3.1 GDI颜色支持 208
8.3.2文本颜色 209
8.3.3 对齐文本 210
8.4.1将对象选入DC 212
8.4.2选择常备字体 212
8.4关于字体 212
8.4.3选择非常备字体 213
8.5使用画笔和画刷 216
8.5.1 画笔 216
8.5.2 画刷 219
8.6映射模式 221
8.7光栅操作 222
8.7.1文本绘图函数 222
8.7.2文本坐标的计算 224
8.8剪取区域 228
8.9 小结 228
9.1位图和视频内存 229
第9章位图、调色板和DIB 229
9.2创建CBitmap对象 230
9.3加载和设置位图内容 232
9.4把CBitmaps绘制到屏幕上 233
9.4.1绘制位图 234
9.4.2创建和显示位图 235
9.5光栅操作 237
9.6 BlitDemo程序 240
9.7调色板和颜色 245
9.7.1其他颜色空间 246
9.7.2逻辑调色板 248
9.7.3调色板事件 250
9.7.4 SetSystemPaletteUse函数 251
9.8设备无关位图 251
9.8.1剖析DIB文件 251
9.8.2 CDib类 253
9.8.3 ShowDIB演示程序 259
9.9双缓冲 261
9.10小结 263
第2部分对话框 265
第1 0章 对话框基础知识和常用控件 267
10.1从对话框和控件开始 267
10.1.1定义CDialog派生类 267
10.1.2 CDialog的主要成员 268
10.1.3显示、控制模态对话框 269
10.1.4命令处理路由和默认处理 270
10.1.5控件也是窗口 273
1 0.1.6把MFC类与控件关联起来 274
10.2.1按钮 282
10.2使用CButton类 282
10.2.2单选钮 283
10.2.3复选框控件 288
10.2.4位图按钮 288
10.2.5使用BS_BITMAP风格 290
10.3使用CEdit类 293
10.3.1使用DDX传送数据 293
10.3.2使用编辑控件 295
10.3.3修改示例程序 298
10.4使用CListBox类 300
10.4.2选择项和查找项 301
10.4.1添加和删除选项 301
10.4.3使用选项数据 302
10.5使用CComboBox 304
10.6修改控件运行时的属性 305
10.6.1改变控件的颜色 305
10.6.2设置控件字体 307
10.6.3循环遍历对话框中的控件 308
10.7小结 308
11.1无模态对话框 309
第1 1章对话框和窗体视图 309
11.1.1创建和显示无模态对话框 310
11.1.3无模态对话框示例程序 315
11.2 CommandUI和KickIdle 320
11.3键盘加速键 323
11.4截获键盘输入 325
11.5串行化基于对话框的应用程序 326
11.5.1让每个类可串行化 326
11.5.2实现Serialize虚函数 327
1 1.5.3从磁盘读取数据 327
11.5.4将数据保存到磁盘 327
11.5.5基于对话框的串行化示例程序 328
11.6为SDI和MDI应用程序创建窗体视图 331
11.6.1创建SDI窗体视图应用程序 332
1 1.6.2在文档的多个视图之间进行切换 333
11.7 MFC控件视图 337
11.7.1常见的误解 338
11.7.2工作原理 338
11.7.3创建CListBoxView类 339
11.7.4使用CListBoxView类 340
11.8小结 341
第12章属性单和属性页 343
1 2.1 CPropertySheet和CPropertyPage 343
12.1.2创建CPropertyPage类 344
12.1.1创建属性页资源 344
12.1.4显示无模态CPropertySheet 345
12.1.3显示模态CPropertySheet 345
12.1.5在对话框内显示属性单 347
12.2模态属性单演示程序 349
12.3高级技巧和提示 352
12.3.1除去标准按钮 353
12.3.2重定位标准按钮 354
1 2.3.4禁用选项卡 356
12.3.3更改标准按钮的标题 356
12.3.5重新启用属性页 359
12.3.6动态设置CPropertyPage选项卡标题 361
12.3.8利用CPropertyPage选项卡的助记符 363
12.3.7更改选项卡的字体 363
12.4小结 365
第3部分高级编程 367
13.1 自己绘制与自定义绘制 369
第1 3章 自定义绘制控件 369
13.1.1处理NM_CUSTOMDRAW通知 370
13.1.2为什么自定义绘制 371
13.2.1创建类 372
13.2创建自定义绘制控件 372
13.2.2 ClistCtrlWithCustomDraw类 373
13.3小结 383
第14章 为控件添加自定义行为 385
14.1添加行为 385
14.1.1修改基类 386
14.1.2多重继承 387
14.1.4模板类 390
14.1.3消息映射 390
14.1.5两者兼顾的方法 391
14.1.6消息映射的问题 393
14.1.7错误 395
14.2.1问题 398
14.2调整对话框和属性页 398
14.2.2模板友好的消息映射 398
1 4.2.3多重继承 400
14.2.4模板类 402
14.2.6调整对话框中控件的尺寸 405
14.2.5全部集中到一起 405
14.2.7使用TXResizable 412
14.3小结 412
第15章打印和打印预览 413
15.1使用Win32 SDK实现打印 413
15.1.1简单的打印示例程序 414
15.1.2退出打印作业 416
15.2用MFC进行打印 422
15.2.1理解打印过程中开发人员和框架的作用 422
15.2.2理解MFC打印序列 423
15.2.3 WYSIWYG打印示例程序 424
15.3打印预览的体系结构 429
15.3.1 打印预览过程 429
15.3.2修改打印预览 429
15.3.3增强应用程序的打印预览 430
15.5小结 432
第1 6章使用DLL 433
16.1 DLL概述 433
16.1.2加载DLL 434
16.1.1动态库和静态库 434
16.2 Visual C++常规DLL 435
16.2.2了解常规DLL内部 436
16.2.1创建常规DLL 436
16.2.3实现自己的DIIMain函数 437
16.2.4动态加载DLL 437
16.2.5编写Windows异常分支 444
16.2.6使用DLL的全局C++对象 451
16.3.1理解MFC扩展DLL内核 458
16.3.2通过MFC扩展DLL导出类 458
16.3 MFC扩展DLL 458
16.3.3关于AFX_EXT_CLASS的更多内容 460
1 6.3.4使用嵌套的MFC扩展DLL 460
16.3.5导出资源 461
16.3.6编写在DLL中封装文档和视图的演示程序 461
16.4小结 465
第17章 多线程编程 467
17.1.1创建工作者线程 468
17.1使用线程 468
17.1.2线程函数编程 471
17.1.3创建UI线程 472
17.1.5使线程睡眠 474
17.1.4挂起和继续执行线程 474
17.1.6从一个线程终止另一个线程 475
17.1.7线程、进程和优先级 478
17.1.8进程优先级类 479
17.2在线程之间共享MFC对象 480
17.3在多线程应用程序中使用C运行时函数 482
17.4多线程演示程序 482
17.5小结 486
第1 8章MFC异常处理 487
1 8.1结构化异常处理 487
18.2异常处理语法 488
18.2.1抛出异常 488
1 8.2.2捕获异常 488
1 8.3错误处理技巧比较 489
1 8.3.1处理错误码 490
1 8.3.2在正确上下文中处理错误 490
1 8.3.3提高代码可读性 491
1 8.4.1创建和删除CException对象 493
18.3.4从构造函数中抛出异常 493
1 8.4 CException类 493
1 8.4.2从CException对象中检索错误信息 494
1 8.4.3捕获多种异常类型 495
18.5定义CException派生类 496
1 8.5.1研究CFileException类 497
1 8.5.2 CFileException演示程序 498
18.5.3定义自己的CException派生类 501
18.6.1确定应该捕获异常的函数 504
18.6高级异常处理技术 504
18.6.2确定放置在try块中的代码 505
18.6.3确定放置在catch块中的代码 506
18.6.4从虚函数中抛出异常 507
18.7小结 510
第4部分数据I/O 511
第1 9章 剪贴板 513
19.1 使用Windows剪贴板API 513
19.1.1为数据分配内存空间 514
19.1.4打开剪贴板 515
19.1.3解除对全局内存的锁定 515
19.1.5清空剪贴板 515
19.1.2把数据复制到全局内存中 515
19.1.6设置剪贴板数据 516
19.2传递纯文本的示例程序 517
19.1.7关闭剪贴板 517
19.2.1创建SimpleTextTransfer示例项目文件 518
19.2.2把文本复制到剪贴板上 518
1 9.2.3把文本剪切到剪贴板上 519
19.2.4粘贴剪贴板上的文本 520
19.2.5 对SimpleTextTransfer示例程序进行测试 520
19.3.2粘贴剪贴板中的位图图像 522
19.3转移位图图像的示例程序 522
19.3.1创建BitmapTransfer示例项目文件 522
19.3.3对Paste Bitmap按钮的功能进行测试 524
19.3.4把位图图像复制到剪贴板上 524
19.3.5测试把位图复制到剪贴板上的程序功能 527
19.4转移自定义数据的示例程序 527
19.4.1创建CustomDataTransfer示例项目文件 528
19.4.3把自定义数据复制到剪贴板上 528
19.4.2把自定义数据格式复制到剪贴板上 528
1 9.4.4从剪贴板上粘贴自定义数据 530
19.5接收剪贴板上内容已被更改的通知消息 532
19.6小结 536
第20章使用ODBC 537
20.1 ODBC定义和数据库术语 537
20.2 ODBC的标准 539
20.2.1理解ODBC的工作方式 540
20.3实现ODBC 541
20.2.3 ODBC SQL一致性层 541
20.2.2 ODBC API一致性层 541
20.3.1配置ODBC 542
20.3.2连接数据源 543
20.3.3查询数据和数据源 545
20.3.4准备和执行SQL请求 546
20.3.5检索数据 546
20.3.6断开与数据源的连接 547
20.4使用ODBC获取数据 548
20.4.1创建ODBC DSN 549
20.4.3修改ODBCDemo对话框 550
20.4.2为Visual C++项目添加对ODBC的支持 550
20.5.1 CODBCDynamic类声明 556
20.5使用ODBC动态查询数据源 556
20.5.2了解CODBCDynamic类的工作方式 558
20.5.3使用CODBCDynamic类 563
20.6小结 564
第21章MFC数据库类 565
21.1 CDatabase对象 565
21.1.1使用CDatabase::Open函数 567
2 1.1.3事务和CDatabase对象 568
2 1.1.2使用CDatabase::OpenEx函数 568
21.2 CRecordset对象 569
21.2.1构造一个记录集 574
21.2.2打开一个记录集 574
2 1.2.3使用RFX读写数据 575
21.2.4过滤记录 575
2 1.2.5对记录集返回的记录进行排序 577
21.2.6在搜索中使用通配符 578
21.2.7在结果集中移动 579
21.3.1 UserMaintenance演示程序 580
21.3 MFC数据库类编程 580
21.2.9删除记录 580
2 1.2.8保存记录 580
21.3.2参数化记录集与查询 590
21.4小结 598
第22章ADO 599
22.1 ADO概览 599
22.1.1通用数据访问初步知识 599
22.1.2 ADO结构 600
22.1.3 ADO的许多接口 603
22.1.4仔细阅读ADO类库 603
22.2使用ADO编程 604
22.2.1导入ADO类库 604
22.2.2初始化和结束COM 606
22.2.3连接数据源 606
22.2.4创建命令 607
22.2.5执行返回数据的命令 608
22.2.6筛选数据和对数据排序 609
22.2.8更新数据 612
22.3 Demo ADO应用程序 613
22.3.2显示用户 614
22.3.3更新用户信息 617
22.3.4添加一些用户界面装饰 620
22.4小结 622
第23章DAO 623
23.1 DAO层次结构 624
23.1.1 DBEngine对象 625
23.1.2 Workspaces集合对象 625
23.1.3 Workspace对象 625
23.1.4 Databases集合 625
23.1.5 Database对象 626
23.1.6 Recordsets集合 626
23.1.7 Recordset对象 626
23.2.2 dbDAO C++类 627
23.2 DAO的多种内部形式 627
23.2.1 DAO自动化接口 627
23.2.3 MFC DAO类 628
23.3使用MFC DAO类 628
23.3.1 CDaoDatabase类 629
23.3.2 CDaoWorkspace类 631
23.3.3 CDaoRecordset类 631
23.4 MFC DAO演示程序 638
23.4.1添加一个工具类封装用户数据 639
23.4.2为UserMaster表创建一个CDaoRecordset类 639
23.4.3初始化对话框 639
23.4.5初始化对话框的控件 640
23.4.4将用户添入列表框 640
23.4.6列表框项选择事件处理程序 641
23.4.7保存用户数据 642
23.4.8删除用户 644
23.4.9清理工作 645
23.4.10测试演示程序 646
23.5小结 646
第24章MFC中的CFile和文件I/O 647
24.1 CFile类 647
24.1.1实例化CFile对象 648
24.1.2打开文件 648
24.1.4将数据写入文件 650
24.1.3从文件读取数据 650
24.1.5定位文件中的数据 651
24.2打开和显示二进制文件的例子 652
24.3使用文本文件 654
24.4以逗号进行分隔的文件类 656
24.5打开和显示CSV文件的例子 661
24.6操作压缩数据 663
24.6.1数据压缩标准 663
24.6.2 CompressDemo程序 664
24.6.3 CCompressedFile类函数 666
24.6.4剖析CompressDemo 668
24.7小结 670
第25章 在Visual C++中使用XML 671
25.1 XML概述 671
25.2 XML术语和语法 672
25.3 XMLDOM介绍 675
25.4上载和查看XML文档 676
25.4.1创建Visual C++项目和对话框 676
25.4.2合并XML支持 677
25.4.3上载XML文档 678
25.4.4遍历XML文档 679
25.4.5 使UI更友好 682
25.5小结 684
第5部分 COM和ATL 685
第26章基于接口的程序设计 687
26.1基于组件的软件 687
26.1.1 n层系统 688
26.1.2接口与实现 689
26.1.3抽象类和接口 690
26.1.4 C++的VTBL 692
26.1.5管理对象 692
26.2使用IUnknown 693
26.2.1管理生命周期 694
26.2.2 GUID,CLSID和IID 696
26…2 3发现身份 697
26.2.4使用HRESULT值 698
26.2.5接口不变性 700
26.2.6接口继承 701
26.3 IDL简介 703
26.4小结 706
第27章创建和使用组件 707
27.1 COM的设计目标和优势 707
27.2对象和服务器 708
27.3创建COM对象 709
27.4注册表 711
27.4.1 DLL必须输出的函数 712
27.4.2IClassFactory 714
27.4.3使用RegSvr32 716
27.5小结 722
第28章类型库 723
28.1类型库 723
28.2列集 724
28.2.1类型库列集 725
28.2.2 IDL,ODL和MkTypLib 725
28.3 C++编译器扩展 728
28.3.1 EXE服务器和列集 731
28.3.2自定义接口和proxy-stub DLL 734
28.4小结 736
29.1套间模型 737
第29章COM中的线程 737
29.1.1 STA与MTA 738
29.1.2客户/服务器线程 739
29.1.3混合线程模型 739
29.2线程列集 741
29.2.1MEOW数据包 743
29.2.2问题较多的FTM 746
29.3小结 748
第30章ATL介绍 749
30.1活动模板库 749
30.2创建ATL COM应用程序 750
30.2.1查看ATL应用程序代码 751
30.2.2创建新的ATL对象 755
30.2.3查看ATL对象代码 757
30.2.4编写带属性的代码 761
30.3扩展向导 764
30.3.1多个对象 764
30.3.2多个接口 764
30.4支持ATL调试 767
30.4.1_ATL_DEBUG_QI宏 767
30.4.2_ATL_DEBUG_INTERFACES宏 767
30.4.3ATLbuild环境的配置 768
30.4.4实现ATL的ISupportErrorInfo接口 768
30.5小结 770
第31章ATL的窗口程序设计 771
31.1 ATL窗口类 771
3 1.2消息映射 772
3 1.2.1替代消息映射 773
31.2.2链接的消息映射 775
31.2.3反射的消息 776
3 1.3 ATL窗口应用程序示例 777
31.3.1创建Win32应用程序项目 777
3 1.3.2手工添加ATL的支持 778
3 1.3.3 创建一个ATL窗口 779
31.3.5测试HelloATL应用程序 781
31.3.4修改WinMain来创建ATL模块 781
31.4 ATL框架-视图应用程序示例 782
3 1.4.1创建Scribble项目 782
3 1.4.2添加主框架窗口 782
31.4.3处理鼠标的输入操作 785
31.4.4添加菜单 787
31.5小结 790
第32章用ATL处理事件 791
32.1事件的定义 791
32.2源接口 793
32.3向导对事件的支持 793
32.4 Event接口定义 794
32.5连接点和IConnectionPoint 796
32.6 IConnectionPointContainer 796
32.7建立事件的调用序列 798
32.8不带属性的服务器端事件的支持 798
32.9带属性的服务器端的事件支持 800
32.10不带属性的客户端事件的支持 802
32.1 1带属性的客户端事件的支持 804
32.12小结 805
第33章用ATL实现自动化 807
33.1自动化介绍 807
33.1.1 VARIANT 808
33.1.2 IDispatch接口 810
33.1.3 Dispinterfaces 813
33.1.4双接口 813
33.1.5 ATL对IDispatch的支持 814
33.2创建ATL自动化服务器 816
33.3 自动化客户 818
33.3.1智能指针客户 819
33.3.2 MFC包装客户 819
33.3.3HTML/JavaScript客户 823
33.3.4使用CComDispatchDriver 824
33.5小结 825
33.4使用双接口和自动化的问题 825
第34章WTL简介 827
34.1 WTL概述和特点 827
34.2下载和安装WTL 829
34.3 WTL的Hello示例程序 830
34.4 WTL的Scribble程序 835
34.5 WTL的适用范围 837
34.6学习更多WTL的知识 838
34.7小结 838
第6部分 COM+编程 839
35.1 COM+和标准COM部件 841
35.1.1创建标准COM部件 841
第35章 创建完整的COM+应用程序 841
35.1.2建立简单的脚本客户 844
35.1.3将COM部件集成到COM+运行环境中 845
35.2 COM+和状态 849
35.2.1状态的类型 849
35.2.2存储状态 850
35.3 COM+部件需求 851
35.4建立COM+部件 852
35.4.1上下文对象 852
35.4.2对象控制 853
35.4.3使用Visual C++建立COM+部件 854
35.4.4共享属性管理器 855
35.4.5在COM+内引用对象 857
35.4.6在COM+内创建对象 858
35.5小结 858
第36章 COM+和松散耦合事件 859
36.1 COM+事件服务 859
36.1.1事件是什么 860
36.1.2 COM+事件服务限制 861
36.2事件服务演示 862
36.2.1创建发布者 862
36.2.2创建订阅者 864
36.2.3启动COM+事件 867
36.2.4测试COM+事件服务 869
36.3 IEventSubscription接口 870
36.4使用瞬时订阅 871
36.4.1注册瞬时订阅 871
36.4.2取消瞬时订阅注册 872
36.5事件过滤 873
36.5.1管理地创建过滤字符串 874
36.5.2用程序创建过滤字符串 875
36.6小结 876
第37章 COM+排队部件 877
37.1排队部件概述 877
37.1.1排队部件的好处 877
37.1.2定义排队部件 880
37.1.3排队部件适合你吗 883
37.2开发一个简单的QC程序 886
37.2.1编写服务器端的Queued部件 886
37.2.2编写排队部件的客户程序 888
37.2.3测试部件和客户代码 894
37.3小结 896
第7部分ATL服务器 897
第38章ATL服务器初探 899
38.1 ATL服务器概述 899
38.1.1服务器端处理的历史 899
38.1.2 ISAPI扩展和筛选 900
38.2.1创建ATL服务器工程 902
38.2开始使用ATL服务器 902
38.2.2编译连接ATL服务器项目 903
38.2.3快速浏览文件 904
38.2.4模板处理 904
38.3 ATL服务器参数 905
38.3.1单参数函数 905
38.3.2多参数函数 906
38.4小结 910
第39章创建带有ATL服务器的Web服务 911
39.1理解Web服务 911
39.1.1 Web服务易于编写 912
39.2理解SOAP 913
39.1.2 Web服务是平台独立的 913
39.1.3 Web服务可通过防火墙工作 913
39.3 SOAP是什么 914
39.3.1 SOAP包 915
39.4开始ATL服务器Web服务 917
39.4.1创建ATL服务器Web服务 917
39.4.2从MFC应用程序中使用Web服务 919
39.5小结 922
第40章编写ATL服务器应用程序 923
40.1编写一个“每日提示”的演示程序 923
40.1.2实现标志处理函数 924
40.1.1删除向导的默认值 924
40.1.3更新TipOfTheDay.SRF 928
40.1.4调整外观 929
40.1.5实现每天的随机提示 931
40.1.6引入其他的SRF标志 937
40.2小结 940
第8部分 .NET编程 941
第41章.NET介绍 943
41.1.NET概述 943
41.2选择.NET语言 946
41.3 BCL和系统名字空间 947
41.4生成执行代码 948
41.4.1微软中间语言和JITter 948
41.4.2程序集和元数据 950
41.4.3程序集清单数据 950
41.5小结 952
第42章编写托管C++代码 953
42.1 开始使用Visual C++ 953
42.2作为Smart域的属性 955
42.2.1定义和使用属性 957
42.2.2编译器真正在做什么 958
42.2.4属性的高级用法 960
42.3授权和事件句柄 960
42.2.3指定只读、只写和读/写特性 960
42.4用授权作为回调函数 961
42.5小结 966
第43章托管C++的多线程 967
43.1线程概述 967
43.2使用线程类创建工作者线程 967
43.3向工作者线程传递数据 971
43.4线程的生命周期管理 974
43.4.1暂停和恢复线程的执行 974
43.4.2退出线程 976
43.4.3将所有方法合起来使用 979
43.5使用线程的优先级 983
43.6同步线程 986
43.6.1用monitor类来保护代码 988
43.6.2用mutex类来同步代码 991
43.7多线程设计指南 992
43.7.1何时使用线程 992
43.7.2何时不使用线程 993
43.8小结 994
第44章使用Windows Forms 995
44.1创建第一个Windows Forms程序 995
44.2在Windows Forms中添加控件 998
44.3在Windows Forms应用程序中集成菜单 1003
44.4用托管C++编写图像浏览器 1007
44.5小结 1012