《OLE 2高级编程技术 对象链接与嵌入技术》PDF下载

  • 购买积分:22 如何计算积分?
  • 作  者:(美)Kraig Brockschmidt著;张 起等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1995
  • ISBN:7505326775
  • 页数:823 页
图书介绍:

目录 1

前言 1

读者对象 2

有关汇编语言的要求 3

书中的代码格式 3

致谢 3

路线图(Road Map) 4

第一部分 Windows对象 9

第一章 OLE 2概述 9

Windows对象:构件对象模式(Component Object Model) 10

对象和接口 12

结构化存储与复合文件 15

标准数据传输及通告 17

通知单(Notification) 18

数据对象和剪贴板 18

数据对象与拖放 19

数据对象和复合文档 19

数据对象和DDE 20

复合文档:对象嵌入 20

复合文档:对象链接和标记 21

自动化 23

复合文档:定位激活(直观编辑) 23

第二章 约定、C++及示例代码 25

C还是非C(拟萨士比亚语) 25

用户定义型:C++类 26

访问权限(Accss Rights) 30

单一继承性 31

虚拟函数与抽象基类 34

多重继承性 36

示例代码 38

包含文件:INC目录 38

库:LIB目录 39

三个Amigos:BttnCur,GizmoBar及StatStrip 40

BUILD目录 40

类库:CLASSLIB目录 41

接口模板:INTERFAC目录 43

章节源文件:CHAPxx目录 44

Cosmo:一个图形编辑器 44

Patron:一个页面载体 46

第三章 对象和接口 51

生命的首要问题,宇宙和对象(拟道格拉斯·埃德姆语) 52

Windows对象与C++对象的比较 55

让我们旅行去 56

类定义 59

对象例示 59

Windows对象与C++对象的其它不同之处 59

对象引用 60

对象毁灭 61

C和C++中的一个简单的对象:RECTEnumerator 61

RECTEnumerator和IEnumRECT接口 62

创建RECTEnumerator对象 84

使用IEnumRECT指针 84

引用计数 85

我的最优化王国 87

调用-使用-释放 88

IUnknown,万物之根 89

QueryInterface和继承(Inheritance)的比较 91

QueryInterface特性和接口的生命周期 91

一些数据类型和调用约定 93

STDMETHOD和相关内容 93

HRESULT和SCODE 94

全局唯一标识符:GUID、IID、CLSID 96

OLE 2接口和API函数 96

客户接口(Custom Interface) 97

接口与API函数的比较 98

什么是Windows对象(再次讨论) 98

小结 99

第四章 构件对象(构件对象模型) 101

令人着迷的东西究竟在哪儿 102

Windows对象的新增应用程序 104

扩大信息队列 104

确认建库版本 105

调用CoInitialize或OleInitialize 106

调用CoUninitialize或OleUninitialize 107

内存管理和分配程序对象 107

来自类标识符的构件对象:构件用户 120

#include<initguid.h>和预编译过的头文件 128

例示一个构件对象 129

管理对象及调用CoFreeUnusedLibraries 132

实现一个构件对象和一个服务器 133

注册CLSID 154

实现分类工厂(Class Factory) 156

展示分类工厂 157

DLL服务器 157

EXE服务器 158

提供一个卸载机制 160

DLL服务器 160

EXE服务器 162

Cosmo的Polyline——一个DLL对象 164

对象复用性 168

示例一:对象包含 169

示例二:对象聚集(Aggregation) 170

小结 176

第二部分 面向对象的系统性能一文件和数据传输 179

第五章 结构化存储和复合文件 179

动机的形成 181

使人紧张不安的Patron文件 181

去除咖啡因的方法 183

使你精力充沛却不会紧张不安:复合文件 185

复合文件的特征 186

流、存储及位锁存对象 186

单元的命名 187

存取模式 188

交易式存储(Transacted Storage) 189

增量式存取(Incremental Access) 190

共享单元 191

复合文件对象和接口 192

存储对象和IStorage接口 192

存储的复合文件实现 193

流对象和IStream接口 195

流的复合文件实现 197

LockBytes对象和ILockbytes接口 197

LockBytes的复合文件实现 197

Stat成员函数及STATSTG 198

简单存储:Cosmo 200

实际使用的复合文件 200

用STGM_CONVERT“从帽子上拔去野兔毛” 207

流及文件 208

复杂的复合文件:Patron 210

根存储和临时文件 229

管理子存储 230

多级认可 231

File Save As操作 233

Low-Memory Save As操作 234

作为内存结构的流 236

OLE 2的其它技术与结构化存储 236

IPersistStorage、IPersistStream和IPersistFile接口 237

具有IPersistStorage的一种强化协议 239

有关构件用户和IPersistStorage:构件Cosmo 241

有关构件对象与IPersistStorage:Polyline 244

复合文件的压缩 250

小结 258

第六章 使用数据对象的一致数据传送 261

什么是数据对象 262

新的和改进的超结构 263

数据对象和IDataObject接口 267

FORMATETC枚举器和格式排序 270

构件数据对象 276

某些CDataObject功能部件 287

实现IDataObject 287

一个(构件)数据对象用户 288

数据对象的通告和通知单 301

建立咨询连接 307

发送通知单作为一个数据对象 310

对远程通知单的特殊考虑 314

在通告接收器内部 315

IDataObject作为一个面向对象数据传递的标准 317

视图对象和IViewObject接口 319

IViewObject∷Draw 320

对一个特定设备的呈送 322

绘制进入一个元文件(Metafile) 322

中止长时间的重画 323

其它IViewObject成员函数 324

IViewObject和通知单 324

来自OLE2.DLL的自由存取(Freeload) 325

IDataObject和DDE 334

小结 335

第七章 使用数据对象的剪贴板格式 337

OLE 2剪贴板协议 338

但我想要做的只是拷贝一些简单的数据! 340

一个数据传送构件对象 342

如果已拥有一个数据对象...Component(构件)Cosmo 353

如果已经有了扩展的剪贴板处理(Clipboard-handling)代码 355

简单的数据源和用户:Cosmo 355

启动/关闭 356

Copy(复制)/Cut(剪切) 357

使能Edit(编辑)/Paste粘贴 358

Paste(粘贴) 359

选择性粘贴和一个实用的Patron 361

Paste Special(选择性粘贴)对话框和OLE2UI库 363

“房客”创建,粘贴 367

保存及装载“房客” 370

Copy和Cut 371

小结 372

第八章 使用数据对象的拖放操作 373

源和目标:拖放传送模型 374

一个循序渐进的拖放实现:Cosmo 379

设计并实现放目标用户反馈 394

实现一个放目标对象及IDropTarget接口 396

IDropTarget∷DragEnter 396

IDropTarget∷DragOver 400

IDropTarget∷DragLeave 401

IDropTarget∷Drop 401

设计并实现放源用户反馈 403

注册并调入放目标对象 403

决定拾起事件(Pick Event) 404

实现一个放源对象及IDropSource接口 404

调用DoDragDrop 405

高级拖放:Patron中的反馈与滚动 407

“房客”拾起区域和放源 408

更为高级的放目标击打测试 410

一个反馈矩形 411

滚动页面 414

小结 419

第九章 复合文档和嵌入载体 421

第三部分复合文档:OLE 421

复合文档机制 422

被动态 422

装载态 423

情况1:InProcServer 425

情况2:InProcHandler 426

情况3:缺省处理器(Default Handler) 426

装载对象:所有情况 428

绘制对象 429

运行态 431

妈妈,爸爸,新的对象是从哪里来的? 432

载体应用程序的结构 434

逐步实现嵌入载体 435

在起动和停机时调用初始化函数 436

定义现场和管理现场存储 436

实现现场接口并加入现场变量 439

实现IAdviseSink 444

实现IOleClientSite 447

实现现场的加阴影 453

调入InSert Object对话框 455

调用OleUIInsertObject 457

调用OleCreate或OleCreateFromFile 459

初始化对象 461

绘制和打印对象 465

激活对象并加入对象动词菜单 465

鼠标双击 468

对象动词菜单 469

右鼠标按钮弹出式菜单 473

从剪贴板和拖放传送来创建对象 475

拷贝和资源(source)嵌入式对象 477

关闭并删除对象 480

保存和装载包含嵌套对象的文档 481

处理图标表示形式(高速缓存控制) 484

小结 486

服务器应用程序的结构 487

第十章 复合文档和嵌入对象服务器(EXE) 487

链接支持及最小服务器和最大服务器的比较 489

版本号 489

安装 489

逐步实现嵌入服务器 490

在启动(Startup)和停机(Shutdown)时调用初始化函数 491

创建登记数据库(Registration Database)条目 491

实现和注册一个分类工厂 496

面向嵌套对象的分类工厂 501

以-Embedding起动 502

实现一个携有IUnknown的初始对象 504

实现IPersist Storage接口 512

实现IDataObject接口 518

实现IOleOjbect接口 527

平凡函数 530

必要的函数 540

可选的函数 543

但它仍然不能工作 544

修改服务器的用户接口 545

发送通知单 549

(全服务器)加入OLE 2剪贴板格式 552

(任选的)MDI服务器用户接口和停机 553

小结 554

第十一章 IN-PROCESS对象处理器和服务器 555

在处理模块的结构 555

为什么要使用处理器 557

为什么使用在处理服务器 558

为什么不使用在处理服务器 558

委托给缺省处理器 559

IOleObject 560

IDataObject 561

IPersistStorage(在高速缓存上) 563

IViewObject 564

实现一个对象处理器 565

获得缺省处理器IUnknown 567

在QueryInterface中采用缺省处理器接口 570

实现IPersistStorage 572

实现IOleObject∷GetExtent 577

实现IViewObject 578

要与当地服务器齐头并进 583

年终奖 587

对实现一个在处理服务器的附注 587

小结 599

第十二章 标记和链接载体 601

谁愿意解决一下“什么是一个标记”这个问题? 602

标记类 603

从何处获得标记? 606

逐步链接载体 607

从Insert Object(插入对象)中使链路得以实现 608

从剪贴板和拖放操作中使链接得以实现 611

粘贴链路和粘贴特定命令 612

拖放链接反馈 615

测试链接 616

警告 617

警告:潜在的难题! 618

实现Show Objects(示出对象)命令 618

并实现IOleClient 623

管理一个文件标记,调用IOleObject∷SetMoniker, 623

Links(链路)对话框和IOleUILinkCotainer接口 627

调入Links对话框 643

在装载一个文档时更新链路 646

小结 649

第十三章 标记联编和链路源 651

标记联编机制 652

一个简单的链接对象:单个文件标记 653

一个携一合成的File!Item(文件/项目)标记的链接对象 655

联编一个合成的 658

联接上下文 660

运行对象表 660

一个简单的链路源:Cosmo 661

创建、登记及撤消一文件标识 662

在数据传送时提供链接源格式 664

实现IPersistFile接口 667

实现IOleObject∷SetMoniker和IOleObject∷GetMoniker 670

复杂链接和链接到嵌入 673

为什么要链接到嵌入? 673

创建并管理合成标记 675

源生(source)合成标识 679

以IPersistFile为文档对象实现一个分类工厂 681

为每个项目标记实现IOleItemContainer 684

小结 697

第十四章 与OLE 1的转换、模拟和兼容 699

面向载体的Convert(转换)对话框 700

支持一个Convert菜单项并调入Convert对话框 701

处理Convert To选择 705

处理Activate As选择 706

处理Display As Icon更改 708

在服务器之间的转换 710

面向转换的Registration Database(登记数据库)条目 711

AutoConvertTo和TreatAs 711

Conversion(转换) 712

对IPersistStorage的修改 713

OLE 1嵌入对象的转换和模拟 715

对面向载体的OLE 1兼容性的注释 720

OLE 1服务器的异常表现 720

文件转换 721

小结 726

第四部分 复合文档:定位激活 729

第十五章 可视编辑:定位激活和定位载体 729

定位对话的动机和内容 730

从何而始呢? 731

DoVerb——一个小傻瓜 732

定位激活 733

操作一个活动对象 739

拨出插头:释放 741

Active和UI Active以及由里及表(inside-out)的对象 741

是的,确实是这样的 742

逐步实现定位载体 742

准备载体 743

实现骨架定位载体接口 745

经验:访问框架和文档的现场要求 747

激活和释放对象 753

经验:服务器仍在运行 755

混合一个菜单:要摇晃,不要搅拌 755

协商工具空间 759

经验:菜单消毁:就这样做(对) 759

经验:焦虑和DeferWindowPos 765

经验:“驯化”ShowObject 765

提供定位加速键和焦点 768

经验:古怪的TranslateAccelerator 771

请拐弯:其它杂项 771

警告 774

小结 780

第十六章 复合文档对象的定位激活 781

定位对象的步骤 781

驱动器,请准备好对象 782

实现骨架定位对象接口及对象帮助器函数 784

实现简单的激活和释放 787

对象装饰 795

菜单的汇编与反汇编 798

警告 801

警告 804

创建和消除定位工具 804

管理和处理加速器 808

拐第三个弯... 我们朝着家走去 810

定位激活将把我们带向哪里 818

小结 822

使用随附软盘的说明 823