《Borland C++ Builder应用开发大全》PDF下载

  • 购买积分:28 如何计算积分?
  • 作  者:(美)(C.卡尔弗特)Charlie Calvert等著;徐科等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:1999
  • ISBN:7302035989
  • 页数:1115 页
图书介绍:本书深入系统地介绍了Borland C++ Builder及如何使用它开发Windows应用程序。从基本的Windows程序到数据库编程,乃至最新的Internet网络浏览器。全书共分8部分,系统地介绍了使用C++ Builder开发平台创建关系数据库,客户机服务器和多层数据库、创建组件、Internet网络浏览器,以及如何编写ActiveX、DCOM和OLE程序,创建丰富多彩的图形界面和多媒体技术等。本书内容丰富,可读性强,是一本C++ Builder方面权威的著作。

第1部分 入门指南 1

序 1

第1章 C++Builder导论 1

1.1 本书面向的对象 1

1.2 如何阅读本书 2

1.2.1 本书的指导思想 2

1.2.2 分布式计算 3

1.3 新的调试工具 4

1.3.1 调试一个DLL 8

1.3.2 在EXE文件内部调试DLL 9

1.3.3 在DLL中设置断点以及其他的技巧 10

1.3.4 与C++Builder 1.0版本的区别 11

1.4 VCL的概念 12

1.4.1 可视化组件的时代 12

1.4.2 组件的优点 12

1.4.3 核心技术:组件、属性、委托模型 13

1.5 为什么使用VCL 14

1.5.1 保留OWL和MFC中的代码 15

1.6 准备工作 15

1.6.1 版权说明 15

1.6.2 代码中的错误 16

1.6.3 有关引用Delphi的问题 16

1.7 小结 17

1.6.5 配套的光盘 17

1.6.4 优化代码 17

第2章 事件 18

2.1 事件:C++Builder委托模型 18

2.1.1 委托和Windows API函数 18

2.1.2 在C++Builder中创建事件 19

2.1.3 委托与继承 19

2.1.4 免协议编程(Contract-Free Programming) 20

2.1.5 委托模型的小结 20

2.2 使用委托模型 20

2.2.1 C++Builder的事件:EVENTS1程序 21

2.2.2 处理OnClick事件 22

2.2.3 处理MouseDown事件 23

2.2.4 响应KeyDown事件 24

2.2.5 处理OnKeyPress事件 24

2.3 了解事件 24

2.3.1 为什么Windows是面向事件的 26

2.4 从事件中提取信息 26

2.4.1 使用集合跟踪消息 27

2.4.2 SETEXP程序 27

2.4.3 使用TShiftState 29

2.4.4 并集、交集和差集 30

2.5 EVENTS2程序:事件的详细内容 31

2.5.1 移动鼠标事件的详细情况 36

2.5.2 捕捉虚拟键 37

2.5.3 直接处理事件 38

2.6 MENUDEF程序:菜单、WM_COM_MAND和WndProc 41

2.6.1 了解MENUDEF程序 41

2.6.2 获取菜单项的ID值 45

2.6.3 捕捉WM_COMMAND消息 46

2.6.4 将WndProc作为程序的主函数 47

2.7 小结 48

第3章 异常 50

3.1 如何使用异常 50

3.2 有关异常的理论 51

3.2.1 异常的作用 51

3.2.3 整个程序是一个try模块 52

3.2.2 缺省的异常处理程序 52

3.2.4 未处理的异常所造成的危险 53

3.3 异常类 53

3.4 异常的基本语法 55

3.4.1 一个简单的try..catch模块 57

3.4.2 将异常与出错字符串相对应 58

3.4.3 查找出错的位置 59

3.4.4 异常处理的小结 60

3.5 发送异常 61

3.5.1 发送一个整数 63

3.5.2 发送VCL异常类 64

3.5.3 了解VCL异常类 65

3.5.4 多重catch语句 66

3.5.5 在通用的catch语句中捕获异常 67

3.6 创建和生成自己的异常 68

3.7 再次发送异常 72

3.8 异常和析构函数 73

3.9 流、异常和释放内存 78

3.10 代替缺省的异常处理程序 81

3.11 使用资源跟踪出错字符串 84

3.12 小结 90

第4章 C++类和可视化组件模型 91

4.1 多重继承 91

4.1.1 处理其他类型的继承 92

4.2 不使用多重继承的类库设计 93

4.2.1 输出流 93

4.2.2 一般性和特殊性 94

4.2.3 多重继承和多文档 94

4.2.4 如何使用多重继承 96

4.3 异常处理 96

4.3.1 操作系统的异常 96

4.3.2 混合异常模型 98

4.3.3 VCL异常 98

4.4 运行时的类型信息 99

4.5 纯虚拟函数 101

4.6 接口与实现 102

4.7 静态分配 104

4.8 构造对象 106

4.9 小结 106

第2部分 关系数据库 107

第5章 数据库基础知识 107

5.1 建立数据库工具 108

5.2 数据库基础知识 108

5.3 命名和结构约定 110

5.4 使用TQuery对象开发SQL 112

5.4.1 数据模块 112

5.5 TDataModule的用途 115

5.5.1 TDataModule的习惯用法 116

5.6 Object Repository 117

5.7 Database Explorer 118

5.8 使用SQL Monitor 119

5.9 了解BDE和别名 121

5.10 别名 123

5.11 TCP/IP安装的一些说明 123

5.12 与ODBC的连接 126

5.13 TBatchMove组件 128

5.14 小结 129

第6章 使用TTable和TDataSet 130

6.2 了解修订后的TDataSet类 131

6.1 可视化数据库控件与非可视化数据库控件 131

6.2.1 TDataSet的主要子类 132

6.2.2 数据集(Dataset)的含义 132

6.3 TDataSet的核心方法 133

6.3.1 打开和关闭数据集 133

6.3.2 导航例程 134

6.3.3 检查数据集的开始或结束部分 136

6.3.4 通过MoveBy方法导航记录 138

6.4 字段(Fields) 138

6.4.1 字段对象的常用方法 139

6.4.2 访问字段名 139

6.4.4 FIELDOBJECT样本程序 140

6.4.3 访问字段内容 140

6.4.5 FIELDER样本程序 141

6.5 修改数据 142

6.5.1 编辑数据集的重要方法 142

6.5.2 编辑和寄送记录的编程问题 143

6.5.3 插入、添加和删除记录 145

6.6 查找 147

6.6.1 使用SetKey或FindKey进行查找 147

6.6.2 使用SetKey和GotoKey 147

6.6.3 使用FindKey和FindNearest 149

6.6.4 按辅助索引查找 149

6.7 范围的确定 150

6.7.1 选择记录的范围 150

6.6.5 使用模糊查找 150

6.7.2 RANGER样本程序 151

6.7.3 RANGER2样本程序 153

6.8 过滤 153

6.8.1 OnFilterRecord事件 153

6.8.2 FILTER样本程序 154

6.9 书签 155

6.10 使用Refresh(刷新)函数 156

6.11 关于TDataSet和TTable更多的内容 157

6.12 一对多关系:链接指针(Linked Cursors) 157

6.13 TDataSource基础知识 159

6.13.1 检查数据集的状态 161

6.14 跟踪数据集的状态 163

6.15 使用TDatabase 166

6.16 不使用可视化工具创建数据库 167

6.17 小结 172

第7章 SQL和TQuery对象 174

7.1 SQL属性 175

7.1.1 使用TQuery对象编程 175

7.1.2 从磁盘上装入通配符查询 176

7.2 TQuery和参数 178

7.2.1 编写用于参数化查询的SQL语句 178

7.2.2 编写参数化查询代码 178

7.2.3 参数化查询例子EASYSQL2 180

7.2.4 采用多连接变量查询 182

7.3 SQL属性和Format函数 184

7.3.1 PARAMSI程序中的Session对象 185

7.4 使用TQuery建立一对多关系 188

7.5 建立多个表之间的连接 190

7.6 RequestLive属性 192

7.7 参数化查询和连接语句 193

7.8 ExecSQL、Delete和Insert语句 194

7.8.1 使用SQL删除记录 195

7.8.2 使用SQL插入记录 196

7.9 特殊的TQuery属性 197

7.10 SQL的一些有趣内容 197

7.11 小结 200

第8章 使用字段对象 201

8.1 Fields Editor 201

8.1.1 启用Fields Editor 202

8.1.2 计算字段(Calculated Field) 205

8.1.3 Columns属性编辑器 207

8.2 查找字段(Lookup Fields) 207

8.2.1 使用Lookup程序 209

8.2.2 有关计算字段 215

8.2.3 有关查找字段 215

8.2.4 TDBLookupComboBox和TDBLookupListBox 216

8.2.5 在Lookup程序中插入和编辑数据 216

8.3 程序运行状态下的TDBGrid 217

8.3.1 在程序运行状态下控制TDBGrid的Options属性 226

8.3.2 在程序运行状态下显示DBGrid的选项 228

8.4 使用TDBGrid列 229

8.4.1 改变TDBGrid对象中的标题 230

8.4.2 改变TDBGrid对象中的一个单独列 231

8.4.3 改变TDBGrid对象中行的颜色 232

8.4.4 改变列的宽度 232

8.4.5 隐藏或移动TDBGrid中的列 233

8.4.6 在程序运行状态下移动列 235

8.5 多记录对象 235

8.6 小结 236

第9章 了解关系数据库 238

9.1 关系数据库入门 238

9.1.1 关系数据库模型的优点 239

9.1.2 简单的集合逻辑:关系数据库的基础 240

9.1.3 在DBD或Explorer中显示索引和关键字 241

9.2 非数字化规则:为每个表创建一个主码 245

9.2.1 一对多关系:数据和索引 246

9.2.2 使用主码 247

9.2.3 使用辅助索引和外码 248

9.2.4 关键字是数据库中的重点 249

9.3 在BCDEMOS数据库中浏览关键字和索引 249

9.3.1 使用Database Desktop创建索引 253

9.3.2 使用Database Desktop创建主码和外码 254

9.4 为什么要使用参照完整性 255

9.5 一对多关系:代码 256

9.5.1 关系数据库和Join 257

9.5.2 Join和QBE 258

9.5.3 使用SQL Builder 261

9.6 应该使用什么样的数据库 262

9.7 小结 263

第10章 实际的平面文件数据库 264

10.1 综述 264

10.2 本章中的样本程序 264

10.3 设计一个应用程序 265

10.3.1 定义数据 265

10.3.2 设计程序:索引 268

10.4 设计程序的外观 270

10.5 查找:使用Category字段 273

10.6 为程序建立命令结构 275

10.7 检测应用程序的“草图” 276

10.8 创建最终的程序 277

10.9 设置只读模式 293

10.10 数据排序 296

10.11 数据搜索 297

10.12 数据过滤 298

10.13 字段的标记 299

10.14 颜色设置 302

10.15 使用注册表 305

10.16 导航注册表 312

10.17 从Run菜单下运行程序 314

10.18 在ADDRESS2程序中使用注册表 315

10.19 剪贴板:剪切、复制和粘贴 316

10.20 小结 317

第11章 会话和实际的关系数据库 318

11.1 实际的数据 318

11.3 KDADDS程序的代码 323

11.3.1 使用KDADD程序 332

11.3.2 设置KDADD程序的索引 333

11.3.3 搜索记录 335

11.3.4 插入数据和取消操作 335

11.3.5 删除数据:第一次查看程序的数据模块 336

11.3.6 数据模块:级联删除(Cascading Deletes) 339

11.3.7 数据模块:整体寄送 340

11.3.8 在字符串资源中放置出错字符串 341

11.3.9 About框 342

11.4 使用KDADDEXPLORE程序 343

11.4.1 使用TSession 343

11.4.2 KDADDEXPLORE程序的代码 345

11.4.3 使用TTreeView显示系统中的数据库 352

11.4.4 扩充TTreeView的节点 353

11.4.5 在TTreeView中添加可用表的列表 354

11.4.6 查找索引和字段 355

11.4.7 显示别名和别名参数 356

11.5 迁移数据、TBatchMove、临时表和NULL字段 357

11.6 小结 358

第12章 使用本地InterBase服务器 359

12.1 关于IterBase 359

第3部分 客户机/服务器和多层数据库 359

12.2 数据库与人才需求 360

12.3 配置本地InterBase 360

12.4 配置InterBase别名 363

12.5 创建数据库 365

12.6 用WISQL浏览数据库 367

12.7 事务处理 368

12.8 高速缓冲更新(cached updates) 372

12.9 多对多关系 376

12.10 安全性与InterBase服务器管理器 384

12.10.1 定义表的访问权限 385

12.10.2 通过服务器管理器备份表 385

12.11 小结 386

第13章 高级InterBase概念 387

13.1 MUSIC程序 388

13.2 设计MUSIC程序 388

13.2.1 创建数据库方案 389

13.2.2 改变表:Null或Not to Null 390

13.2.3 更名已有表中的字段 391

11.2 检查关系地址程序 391

13.2.4 创建Blob字段 392

13.2.5 主码与外码 392

13.3 创建MUSIC表的索引 395

13.4 生成器、触发器与存储过程 396

13.4.1 不要在激活的索引中使用触发器 397

13.4.2 使用存储过程 398

13.4.3 C++Builder端的存储过程 398

13.5 服务器端规则与客户端规则 400

13.6 MUSIC程序口综述 401

13.7 使用子窗体 401

13.8 MUSIC程序代码 405

13.8.1 使用MUSIC程序 408

13.8.2 屏蔽口令:TDatabase对象 409

13.8.3 FormCreate事件 409

13.9 使用MUSIC程序数据 413

13.9.1 查找 413

13.9.2 查询数据库问题:初级SQL 414

13.9.3 不返回数据集的存储过程 418

13.9.4 浏览确定范围内的数据 419

13.10 小结 420

第14章 快速报表、图形与电子报表工具 421

14.1 Windows打印综述 421

14.2 QuickReport基础 422

14.3 行、列、组和一对多 423

14.4 使用样本程序 424

14.5 ADDRESS2样本程序 424

14.5.1 ADDRESS2:打印地址 424

14.5.2 ADDRESS2:对报表中数据进行分组 427

14.6 MUSIC程序的报表 428

14.6.1 一对多报表 429

14.6.2 使用查询进行报表分组 430

14.7 打印窗体 432

14.7.1 Tprinter:打印文本、图形和位图 433

14.7.2 打印图形 441

14.7.3 打印位图 442

14.8 小结 443

第15章 客户机与服务器之间的连通性 444

15.1 连接到服务器 444

15.2 使用Microsoft SQL 6.5 445

15.2.1 创建一个MS SQL别名 446

15.2.2 访问你的数据库 447

15.2.3 将一个Paradox数据库程序转换到MS SQL 449

15.3 使用Oracle 7.32 452

15.3.1 访问你的Oracle数据库 453

15.4 使用Informix 7.20 455

15.4.1 访问Informix数据库 456

15.5 使用Sybase 11.02 458

15.6 使用DB2的2.1.2版本 460

15.6.1 连接DB2时可能出现的连接错误 461

15.6.2 访问你的DB2数据库 463

15.7 小结 465

第16章 多层数据库设计 466

16.1 多层数据库应用程序概述 466

16.2 C++Builder和Internet 467

16.3 分布式体系的三种类型 469

16.4 为什么DCOM会引起争论 470

16.5 DCOM是什么 470

16.5.1 在Windows 95下运行DCOM服务程序 471

16.6.1 应用服务程序 474

16.6 将已有的程序转变为多层应用程序 474

16.6.2 设置DCOM 476

16.6.3 客户应用程序 477

16.6.4 VCL对象浏览器程序代码的修改 479

16.6.5 发送客户应用程序 479

16.7 介绍Active Forms 480

16.7.1 建立一个Active Form 481

16.7.2 了解OCCACHE 484

16.7.3 安装附加文件 484

16.8 使用CAB文件和程序包 486

16.8.1 有关许可的问题 489

16.8.2 使用带有Active Forms的模板 489

16.9.2 使用套接字创建Midas Active Form 490

16.9 套接字和Active Forms 490

16.9.1 关于套接字的概述 490

16.9.3 创建基于Midas的Active Form 492

16.10 小结 494

第4部分 创建组件 495

第17章 继承性 495

17.1 对象 496

17.2 创建简单的对象 497

17.2.1 与VCL类特征的区别 499

17.3 继承性 502

17.3.1 类的引用 503

17.4 虚拟方法 506

17.4.1 反复设计 511

17.4.2 集成:VCL编程的层次 515

17.4.3 创建友元对象 520

17.4.4 使用集成 520

17.4.5 可视窗体继承性 522

17.4.6 可视窗体继承性的优点 525

17.5 小结 526

第18章 封装 527

18.1 综述 527

18.2 封装 527

18.2.1 隐藏数据 529

18.2.2 内联方法 530

18.3 简单性:一个好的对象设计的秘诀 531

18.4 一个具体的实例 532

18.4.1 TWidget和其析构函数 533

18.4.2 使用Widgets 535

18.5 属性 542

18.6 流控制类 544

18.6.1 从流中读取一组件 545

18.7 关于属性的其他内容 546

18.7.1 使用StringLists 550

18.7.2 用字符串索引数组 551

18.7.3 只读属性 553

18.7.4 易使人误解的default指示符 554

18.8 小结 555

第19章 多态性 556

19.1 综述 556

19.2 多态性 556

19.3 多态性的简单例子 557

19.4 多态赋值的兼容性 558

19.4.1 子对象与父对象赋值的兼容性 558

19.4.2 从另一角度看多态性 560

19.5 虚拟方法与多态性 561

19.5.1 ClassicShapeDemo程序 564

19.5.2 使用TCustomControl 567

19.6 VCL中的多态性 568

19.7 封装的多态性要点综述 571

19.8 小结 572

第20章 创建已有组件的继承类 573

20.1 组件理论 573

20.2 创建一个已有组件的继承类 574

20.2.1 创建组件 576

20.2.2 程序包简介 580

20.2.3 组件构造函数 580

20.2.4 测试组件 581

20.2.5 安装组件 582

20.3 扩展Unleash单元 583

20.4 从底层创建组件 592

20.4.1 时钟组件 593

20.5 时钟组件的代码 603

20.5.1 时钟的启动 604

20.5.2 时钟的绘制 604

20.5.3 TColor-Clock对象 606

20.5.4 GOLDCLOCK程序 607

20.6 为组件创建图标 608

20.7 使用API工具 608

20.7.1 单一类型的属性编辑器 609

20.7.2 类属性编辑器 611

20.7.3 类型Class的流属性 612

20.7.4 测试DsgnIntf.cpp 613

20.7.6 使用组件编辑器 614

20.7.5 注册属性编辑器 614

20.8 Clock2:扩展组件和属性编辑器 616

20.8.1 安装组件 626

20.8.2 创建组件编辑器 627

20.9 小结 629

第21章 程序包 631

21.1 什么是程序包 631

21.2 程序包如何工作 631

21.3 程序包与DLL 632

21.4 使用程序包的优点 633

21.5 与程序包相关的文件 633

21.7 创建程序包 635

21.6 安装程序包 635

21.7.1 System Tray Icon程序包(TTrayIcon) 636

21.7.2 TTrayIcon的属性 638

21.8 Scroll Panel程序包(TScrollPanel) 650

21.9 小结 658

第22章 创建组件 659

22.1 仓库 659

22.1.1 接口 660

22.2 Widgct和Pallet组件的层次 679

22.2.1 了解TWidget, TPentium和TPentiumPro 681

22.3 Pallet控件 683

22.3.1 TDataPallet和拖曳 684

22.3.2 TDataPallet和数据库 687

22.4 查询数据库 689

22.5 查看层次 691

22.6 小结 692

第5部分 C++ Builder和Internet 693

第23章 NetMasters因特网组件 693

23.1 Internet简介 694

23.1.1 UUCP:历史的回顾 694

23.1.2 TCP/IP:历史简介 694

23.1.3 以太网(Ethernet):把我们连接起来的硬件平台 695

23.1.4 IP:网际协议 695

23.1.5 TCP:传输控制协议 695

23.2 NetMaster因特网组件简介 696

23.1.6 UDP:用户数据报协议 696

23.1.7 端口:基本的连接单元 696

23.2.1 组件列表 697

23.3 例子 697

23.3.1 例子1:离线组件 698

23.3.2 例子2:简单的调试组件 702

23.3.3 例子3:发送和接收数据 704

23.3.4 例子4:基于Web的组件 707

23.3.5 例子5:新闻、文件和Fingers 709

23.3.6 例子6:基于邮件的组件 714

23.3.7 例子7:UDP消息 717

23.4 小结 719

23.3.8 例子中未涉及到的问题 719

第24章 WebBroker组件 720

24.1 TClientSocket组件 721

24.2 TServerSocket组件 721

24.3 TWebDispatcher组件 726

24.4 TPageProducer组件 727

24.5 TQueryTableProducer组件 727

24.6 TDataSetTableProducer组件 728

24.7 使用WebBroker组件的例子 728

24.7.1 运行CGI程序的HTML文件 728

24.7.2 创建简单的CGI程序 728

24.8 TServerSocket组件的其他用法 732

24.8.2 AWChatServer的实现 733

24.8.1 AWChatServer的初步设计 733

24.8.3 AWChatServer客户程序 741

24.9 小结 741

第25章 使用WININET创建FTP应用程序 742

25.1 准备工作 742

25.2 确定FTP在系统中正常运行 743

25.3 使用WININET的FTP 743

25.3.1 使用InternetOpen 745

25.3.2 使用InternetConnect 746

25.4 连接以后 748

25.5 检索文件 750

25.6 向FTP服务器发送文件 751

25.7 删除文件 752

25.8 建立和删除目录 752

25.9 一个简单的FTP控件 753

25.10 建立用户自绘(Owner-Draw)的列表框 765

25.11 小结 769

第6部分 ActiveX、DCOM和OLE 770

第26章 Automation 770

26.1 关于语言的说明 770

26.2 C++ Builder和ATL 771

26.3.3 即插即用应用程序 772

26.3.2 COM和Windows 772

26.3.1 COM的概念 772

26.3 COM基础知识 772

26.3.4 COM存在的问题 774

26.3.5 COM与UNIX 775

26.3.6 COM+ 775

26.4 创建一个简单的COM服务程序和客户程序 776

26.4.1 创建一个简单的服务程序 776

26.4.2 建立一个简单的客户程序 780

26.5 接口 787

26.5.1 IDispatch、双重接口和Dispinterfaces 789

26.5.2 VTables 790

26.6 类型库(Type Libraries) 791

26.6.1 什么是类型库 792

26.6.2 创建类型库 793

26.6.3 使用coclass 794

26.6.4 使用接口 795

26.6.5 定义接口的实现部分 795

26.6.6 合法的Automation类型 799

26.7 忽略TNoParams中的参数 800

26.8 有关注册的问题 800

26.9 对数据进行自动编组 802

26.10 使用WideStrings 803

26.11 从一个CoClass获取两个或多个接口 804

26.11.1 调用CoCreateInstance 812

26.12 小结 813

第27章 DCOM和OLEnterprise 814

27.1 一个简单的DCOM客户和服务器 814

27.1.1 建立DCOM客户 820

27.1.2 使用远程对象 825

27.2 变量数组 826

27.2.1 什么是变量数组 826

27.2.2 对数组的锁定和解锁 828

27.2.3 一个变量数组的样本程序 830

27.3 权衡远程数据集 833

27.3.1 ServerData程序 841

27.3.2 GETDATA:远程数据集的客户程序 845

27.4 程序数据和Automation数据 853

27.5 OLEnterprise的基本概念 859

27.5.1 OLEnterprise的使用对象 860

27.5.2 使用OLEnterpris 861

27.5.3 OLEnterprise故障排除 862

27.5.4 RPCSS 863

27.5.5 OLEnterprise和Midas 867

27.5.6 OLEnterprise小结 867

27.6 小结 868

第28章 创建新的ActiveX组件 869

28.1 ActiveX控件 869

28.2 C++Builder 3中用来创建ActiveX控件的工具 869

28.2.2 OLE的功能 870

28.2.1 OLE的定义 870

28.2.3 OLE SDK,OCF和MFC 872

28.2.4 Active Templata Library(ATL)和ATLVCL 872

28.3 准备工具 873

28.3.1 OLE包容器各不相同 873

28.3.2 OLE的确不错,但有时结果却不可预知 873

28.4 使用传统方法建立ActiveX控件 874

28.4.1 步骤1:创建GUID 874

28.4.2 步骤2:编写.IDL文件 874

28.4.3 步骤3:运行MIDL.EXE 877

28.4.4 步骤4:编写.REG文件 877

28.4.5 步骤5:在包容器插入的对象列表中查看OCX 880

28.4.6 步骤6:综述 882

28.4.7 步骤7:准备头文件 883

28.4.8 步骤8:编写类工厂 886

28.4.9 步骤9:初始化对象 888

28.4.10 步骤10:回答QueryInerface 890

28.4.11 步骤11:从剪贴板获取数据 891

28.4.12 步骤12:激活对象 894

28.4.13 步骤13:建立控件窗口 896

28.4.14 步骤14:实现Odds和Ends 899

28.4.15 步骤15:在窗体中放入OCX控件 901

28.5 通过VCL组件创建ActiveX控件 901

28.5.1 Object Repository 902

28.5.2 创建ActiveX控件 903

28.6 使用ATL编写ActiveX控件 906

28.6.1 ATL的优点 906

28.6.2 ActiveX线程模型 906

28.6.3 建立Microsoft ATL样本 907

28.7 使用ATL创建OCX 909

28.7.1 ATL与VCL的区别 909

28.7.2 创建项目 910

28.7.3 添加DllEntryPoint和导出COM函数 910

28.7.4 添加类库 912

28.7.5 添加ATL头文件 915

28.7.6 添加继承来的OLE接口 916

28.7.7 添加对QueryInterface的支持 918

28.7.8 添加消息映射 920

28.7.9 添加属性 920

28.7.10 添加事件 920

28.7.11 添加注册表的支持 921

28.7.12 控件的初始化 921

28.7.13 添加自定义方法 921

28.7.14 添加.RC文件 927

28.7.15 添加.RGS文件 928

28.7.16 建立ActiveX控件 928

28.8.1 使用TD32调试OCX 929

28.8 调试ActiveX控件 929

28.8.2 使用C++ Builder的集成调试器调试OCX 930

28.8.3 将C++ Builder3配置为即时调试器 935

28.9 小结 936

第7部分 图形 937

第29章 VCL的图形类 937

29.1 Windows的GDI和VCL的TCanvas 937

29.1.1 什么是GDI 938

29.1.2 VCL能使你的图形编程更简单 938

29.2 使用TCanvas 939

29.3 使用画刷(Brushes) 939

29.3.1 TBrush::Color属性 940

29.3.2 TBrush::Style属性 940

29.3.3 TBrush::Assign方法 942

29.4 使用画笔(Pens) 943

29.4.1 TPen::Style属性 943

29.4.2 TPen::Width属性 943

29.4.3 TPen::Mode属性 943

29.5 使用字型(Fonts) 944

29.5.1 TPont::Height属性 945

29.5.2 TPont::Size属性 945

29.5.3 TPont::Name属性 946

29.5.4 TPont::Style属性 946

29.5.5 旋转字型 947

29.8 TCanvas::CopyMode属性 948

29.7 TCanvas::ClipRect属性 948

29.6 TCanvas::PenPos属性 948

29.9 使用TCanvas::Pixels 949

29.10 掌握TCanvas方法 950

29.11 BRUSHMAIN例程源码 950

29.11.1 OnCreate事件 957

29.11.2 FormShow方法 958

29.11.3 设置Pen的模式(Mode) 959

29.11.4 使用字型(Fonts) 961

29.11.5 在Canvas上绘制图形 962

29.11.6 使用CopyModes 964

29.11.7 改变ClipRect 964

29.12 使用其他形式的线形 965

29.13 小结 968

第30章 颜色、调色板和图像 969

30.1 深入了解TColor 969

30.1.1 颜色样本方案 970

30.1.2 OnChange事件处理程序 972

30.2 调色板 974

30.3 再论Windows的图像文件格式 978

30.3.1 使用位图和DIB 978

30.3.2 使用图标 978

30.3.3 使用元文件 978

30.4 使用TImage和TPaintBox 983

30.5 关于位图的补充说明 984

30.5.1 旋转位图 985

30.5.2 动态显示 990

30.5.3 淡入淡出 995

30.6 小结 998

第31章 在C++ Builder中使用DirectDraw 999

31.1 何谓DirectDraw 999

31.2 设置DirectDraw 1000

31.2.1 DirectDrawCreate 1000

31.2.2 SetCooperativeLevel 1001

31.2.3 SetDisplayMode 1001

31.2.4 独占模式与Windowed模式 1001

31.3 DirectDrawSurface接口 1003

31.2.5 关于DirectDraw2的问题 1003

31.3.1 Lock函数 1004

31.3.2 IDirectDrawSurface2或IDirectDrawSurface3的问题 1006

31.4 在DirectDraw中使用GDI 1006

31.4.1 使用TBitmap 1007

31.5 IDirectDrawPalette接口 1008

31.5.1 创建一个自定义调色板 1009

31.6 使用DirectDraw 1010

31.6.1 动画制作 1011

31.7 多表面和翻页技术 1012

31.7.1 在背景上制作动画 1013

31.9 小结 1020

31.8 创建DirectDraw组件 1020

第32章 在C++ Builder中使用Direct3D 1021

32.1 什么是Direct3D 1021

32.2 初始化Direct3D应用程序 1021

32.2.1 创建Direct3DRM对象 1023

32.2.2 DirectDrawClipper 1023

32.2.3 Direct3D着色选项 1024

32.2.4 HandleActivate和HandlePaint 1025

32.3 设置一个Direct3D场景 1026

32.3.1 IDirect3DRMFrame 1026

32.3.2 光源 1027

32.4 用IMeshBuilder创建模型 1028

32.3.3 摄影机 1028

32.4.1 在磁盘上保存模型 1029

32.4.2 复杂的网络 1030

32.4.3 变换模型 1031

32.4.4 从磁盘调入网格对象 1033

32.5 纹理贴图 1033

32.5.1 包装一个模型 1034

32.6 一个三维模型和纹理浏览 1036

32.7 小结 1047

第8部分 高级话题 1048

第33章 使用Delphi文件 1048

33.1 如何使用Delphi代码 1048

33.3 在C++Builder 3 中使用Delphi组件 1049

33.2 在C++Builder中使用Delphi代码 1049

33.4 关于Pascal编译器 1050

33.4.1 什么时候可以使用is 1051

33.4.2 Real数据类型 1051

33.4.3 继承Pascal对象模型 1051

33.4.4 空集 1051

33.4.5 Pascal和C++类型 1052

33.5 头文件生成 1052

33.5.1 多重构造函数 1052

33.5.2 数组属性 1053

33.5.3 变体记录 1054

33.6.2 Delphi中的句柄与C++Builder3中的句柄比较 1055

33.6 链接错误 1055

33.6.1 Pascal类中的方法 1055

33.6.3 字节与字对齐问题 1057

33.7 项目示例:Monster Hunt 1057

33.7.1 创建主窗体 1057

33.7.2 关于Monster Hunt 1059

33.7.3 游戏 1060

33.8 Delphi和C++Builder的结合 1071

33.9 小结 1073

第34章 OWL和Microsoft DLL的互用性 1074

34.1 不能使用Microsoft Visual C++6的DLL情况 1074

34.1.1 不要导出C++函数 1074

34.1.2 不能导出类 1076

34.1.3 不要发送脱离DLL的C++异常 1078

34.1.4 不要在一端动态分配内存,而在另一端又将其释放掉 1078

34.1.5 不要将RTL文件句柄传递给DLL 1078

34.2 从Microsoft DLL中导入函数 1078

34.2.1 为VC++的DLL创建一个工作文件.DEF 1079

34.2.2 为VC++DLL创建一个实际的导入库 1079

34.3 创建DLL的结束语 1080

34.4 OWL支持 1080

34.4.1 idetobpr:IDE转换成项目文件的工具 1081

34.4.2 OWL动态设置 1081

34.4.4 简单的Borland C++ 5的OWL应用程序转变成C++Builder3应用程序 1082

34.4.3 OWL、ClassLib和OCF库 1082

34.6 标准C++库 1085

34.5 支持MFC 1085

34.7 如何处置以前的C++Builder应用程序 1086

34.8 混合使用OWL和VCL 1086

34.8.1 OWL/VCL模板类 1087

34.8.2 含有VCL窗体的OWL MDI应用程序 1090

34.8.3 作为客户应用程序的OWL对话框 1096

34.9 小结 1098

第35章 动态/静态链接库和第三方问题 1099

35.1 库链接和DLL加载概述 1099

35.3 创建DLL库 1100

35.2 理解DLL库 1100

35.4 创建一个加载静态库的可执行程序 1103

35.5 一个加载动态DLL的可执行演示程序 1105

35.6 第三方DLL问题 1107

35.7 名字分解 1108

35.8 调用的约定 1109

35.8.1 解决调用约定问题 1110

35.9 使用别名 1111

35.10 静态库 1111

35.11 第三方静态库 1115

35.12 小结 1115