图书目录

目    录

第一篇  高级技术篇

第1章  万丈高楼平地起,一劳永逸 打地基——知识准备 2

1.1  使用Windows API函数 2

1.1.1  API函数的声明 2

1.1.2  使用API函数的注意事项 6

1.2  模块化编程 7

1.2.1  我能在一天之内做出一个软件吗 7

1.2.2  用标准模块还是类模块 7

1.2.3  怎样创建类模块 8

1.3  编程风格 12

1.3.1  变量在使用前一定要定义 12

1.3.2  尽量不要用Variant数据类型 12

1.3.3  代码的缩进和换行 13

1.3.4  避免重复用对象名称做一串调用 13

1.3.5  Boolean型条件表达式的写法 15

1.3.6  字符串为空串的判断 15

1.3.7  能用常量就不要用函数求值 15

1.3.8  数组下标从1开始 16

1.3.9  用Optional选项定义函数的参数 16

1.3.10  不能滥用Goto语句不代表不能用Goto语句 17

1.3.11  尽量少用ActiveX控件 17

1.4  条件编译 18

1.4.1  什么是条件编译 18

1.4.2  条件编译有什么用 18

1.5  获取资料 20

1.5.1  MSDN 20

1.5.2  借助Visual C++的头文件 22

1.5.3  其他资料 23

第2章  这个可以有——在VB中使用指针 24

2.1  在VB中使用指针变量 24

2.1.1  什么是指针 24

2.1.2  如何实现指针变量 24

2.2  VarPtr,StrPtr,ObjPtr函数和AddressOf运算符 25

2.2.1  内联类型和指针类型 25

2.2.2  VarPtr,StrPtr和ObjPtr函数 27

2.2.3  AddressOf运算符 27

2.3  CopyMemory函数 28

2.3.1  CopyMemory函数的声明和功能 28

2.3.2  CopyMemory函数用于内联类型的数据传递 28

2.3.3  CopyMemory函数用于字符串类型的数据传递 29

2.3.4  对象的弱引用 30

2.4  在VB中使用指针程序举例 32

2.4.1  使用指针实现不同类型数据的交换 32

2.4.2  使用指针实现不同窗体模块的数据交换 33

2.4.3  不使用数组类型的参数向函数传递数组 34

2.4.4  用一个Long型参数向函数传递任意类型任意大小的数据 35

2.5  部分字节运算的问题和解决办法 36

2.5.1  Or按位或运算 36

2.5.2  取长整数的高位和低位 40

第3章  不做数据的奴隶——常用数据结构 42

3.1  何谓数据结构 42

3.2  堆栈 43

3.2.1  什么是堆栈 43

3.2.2  堆栈的基本算法 44

3.2.3  堆栈的通用模块实现 44

3.2.4  堆栈通用模块的使用 51

3.3  哈希表 53

3.3.1  什么是哈希表 53

3.3.2  哈希表的基本算法 54

3.3.3  哈希表的通用模块实现 55

3.3.4  哈希表通用模块的使用 75

3.3.5  哈希表类模块与VB的Collection对象的效率比较 77

3.4  带“回收站”的数组 79

3.4.1  基本思想 79

3.4.2  程序实现 79

第4章  青出于蓝胜于蓝——子类技术 84

4.1  Windows窗口和消息驱动机制 84

4.1.1  窗口 84

4.1.2  窗口的消息驱动机制 85

4.1.3  消息的组织和发送 87

4.1.4  Visual Basic事件与消息 89

4.2  子类技术及其常规实现 89

4.2.1  子类技术简介 89

4.2.2  子类技术的常规实现 91

4.2.3  子类技术常规实现的问题 96

4.3  开发实现子类技术的通用模块 97

4.3.1  通用模块的目标 97

4.3.2  封装子类信息的类模块 98

4.3.3  实现子类技术的标准模块 106

4.3.4  子类技术通用模块小结 118

4.4  子类技术通用模块的用法举例 119

4.4.1  标准模块Module1的设计 120

4.4.2  窗体Form1的设计 121

4.4.3  程序的运行效果 122

第5章  想解雇ActiveX通用控件吗—— 使用API函数创建控件 124

5.1  控件的深入理解 124

5.1.1  ActiveX控件 124

5.1.2  dll通用控件库 125

5.1.3  控件的运行机制 128

5.1.4  简单实例——用API函数创建Animation控件 136

5.2  用API函数创建控件的模块划分 140

5.2.1  实现控件的类模块 140

5.2.2  支持的标准模块 143

5.2.3  其他“黑匣子”模块 144

5.2.4  模块划分小结 144

5.3  mdlAPIControlsSupport标准模块 145

5.3.1  公有常量定义 146

5.3.2  控件类型的枚举类型定义 147

5.3.3  管理已创建控件 149

5.3.4  子类处理的自定义窗口程序 151

5.3.5  标准模块的其他内容 156

5.4  clsControlBase基类模块 157

5.4.1  API函数声明和常量、类型定义 157

5.4.2  创建控件 159

5.4.3  实现控件的共有属性 161

5.4.4  实现控件的共有方法 176

5.4.5  类模块的Initialize和Terminate事件过程 181

5.5  实现跳格表控件的控件类模块clsAPITabs 182

5.5.1  API函数声明和常量、类型定义 183

5.5.2  继承的“变通”实现 184

5.5.3  创建跳格表控件 185

5.5.4  实现跳格表控件的属性 188

5.5.5  实现跳格表控件的方法 190

5.5.6  实现跳格表控件的事件 193

5.5.7  clsAPITabs控件类模块的应用实例 196

5.6  实现状态栏控件的控件类模块clsAPIStaBar 198

5.6.1  API函数声明和常量、类型定义 199

5.6.2  继承的“变通”实现 200

5.6.3  创建状态栏控件 200

5.6.4  状态栏分栏和分栏属性 202

5.6.5  状态栏的其他功能 210

5.6.6  实现状态栏的事件 211

5.6.7  clsAPIStaBar控件类模块的应用实例 212

5.7  实现丰富格式文本框控件的控件类模块clsAPIRichTextBox 215

5.7.1  RichTextBox控件加载和继承的“变通”实现 215

5.7.2  创建RichTextBox控件 216

5.7.3  管理文本和RTF代码 219

5.7.4  选择区域 227

5.7.5  文本的剪切、复制、粘贴 229

5.7.6  设置文本格式 229

5.7.7  实现RichTextBox的事件 232

5.7.8  实现RichTextBox的其他功能 233

5.7.9  clsAPIRichTextBox控件类模块的应用实例 234

第6章  路见不平一声吼,强大功能我也有 ——常见VB系统功能问题和解决 237

6.1  长字符串处理 237

6.1.1  VB系统中的字符串连接运算及问题 237

6.1.2  解决方案——clsLongString类模块 240

6.1.3  改进字符串连接效率测试 250

6.2  多种分行格式的纯文本文件的按行读取 251

6.2.1  VB按行读取文本文件的常规方法及问题 251

6.2.2  二进制读取文本文件 253

6.2.3  设计类模块支持多种分行格式 255

6.2.4  类模块的使用 274

6.3  部分字符串函数的增强 275

6.3.1  Split函数的增强 275

6.3.2  Trim函数的增强 281

6.3.3  判断Collection对象的键是否存在 283

6.4  解决控件不支持鼠标滚轮的问题 284

6.4.1  鼠标滚轮消息WM_MOUSEWHEEL 285

6.4.2  窗口滚动消息WM_HSCROLL和WM_VSCROLL 285

6.4.3  解决鼠标滚轮问题的通用模块 287

6.5  增强VB的滚动条控件 289

6.5.1  基本思路 290

6.5.2  实现技术 291

6.5.3  类模块的完整代码 297

6.5.4  增强滚动条通用模块使用举例 303

第7章  让你的程序在哪都不out——使程序支持多国语言版 308

7.1  多国语言支持的主要问题 308

7.2  字符串资源和资源加载 309

7.2.1  字符串资源 309

7.2.2  VB的资源编辑器 310

7.2.3  解决不同语言语法元素顺序问题 311

7.3  编写支持多国语言版程序的通用模块 313

7.3.1  公有函数 313

7.3.2  条件编译的全局元素 314

7.3.3  开发多国语言版的程序小结 316

7.4  支持多国语言版的程序实例 317

7.4.1  简单实例 317

7.4.2  改造clsReadLines类模块 319

第二篇  功能模块篇

第8章  程序骨感没人爱——Windows绘图和图形界面增强 324

8.1  GDI的基本原理 324

8.1.1  色彩和坐标 324

8.1.2  设备环境简介 327

8.1.3  GDI对象 330

8.2  高级文本描绘的类模块clsDrawText 335

8.2.1  DrawText函数 335

8.2.2  clsDrawText类模块的开发 338

8.2.3  clsDrawText使用的实例程序 349

8.3  绘制Windows图形元素 352

8.3.1  绘制蚀刻线 352

8.3.2  绘制3D效果的边框 354

8.3.3  绘制Windows按钮元素 356

8.3.4  绘制首尾移动样式的按钮 361

8.4  绘制透明位图 363

8.4.1  位图简介 364

8.4.2  光栅操作 366

8.4.3  绘制透明位图 367

8.4.4  程序实例 371

8.5  为静态图形添加图形热区 372

8.5.1  图形热区实现的基本思路 372

8.5.2  开发图形热区管理类模块clsGraphCoords 373

8.5.3  图形热区编程实例 381

8.6  改变窗体透明度 383

8.6.1  设置窗体透明度的API函数 384

8.6.2  编写类模块封装设置窗体透明度的API函数 384

8.6.3  程序实例 388

8.7  使控件具有Windows XP风格的外观 391

8.7.1  XP风格外观的控件探秘 391

8.7.2  使应用程序中的控件具有XP风格 393

8.7.3  程序实例 397

第9章  搞定这个怕什么?你懂我的—— 菜单高级控制和菜单选择助手 398

9.1  编写菜单控制标准模块mdlMenuFuncs 399

9.1.1  菜单的句柄 399

9.1.2  获取菜单项信息 402

9.1.3  设置菜单项信息 406

9.1.4  设置菜单项高亮状态 412

9.1.5  返回或设置子菜单默认项 412

9.1.6  获得菜单中的菜单项总数 413

9.1.7  系统菜单控制 414

9.2  菜单选择助手 415

9.2.1  基本思路 416

9.2.2  在mdlMenuFuncs中添加的完整代码 419

9.2.3  clsMenuSelAssist的完整代码 420

9.3  程序实例 423

9.3.1  菜单选择助手功能演示 423

9.3.2  标准模块mdlMenuFuncs部分功能演示 423

第10章  玩转注册表,换汤不换药——简化ini文件和注册表编程 426

10.1  ini文件和使用ini文件保存信息 426

10.1.1  ini文件的结构 426

10.1.2  ini文件读写的主要API函数 427

10.1.3  封装ini文件的读写操作 428

10.1.4  ini文件读写的实例程序 429

10.2  注册表结构简介 429

10.2.1  控制项 430

10.2.2  子项 432

10.2.3  键值 432

10.3  编写通用模块封装常用注册表读写操作 433

10.3.1  项的句柄和项的打开、关闭 433

10.3.2  固定子项位置 435

10.3.3  创建或删除子项 436

10.3.4  读取子项键值 438

10.3.5  设置子项键值 440

10.3.6  删除子项键值 442

10.3.7  读取注册表任意位置数据 443

10.3.8  设置文件关联 444

10.4  注册表编程实例 448

10.4.1  记忆窗体位置 448

10.4.2  在固定子项下读写数据 448

10.4.3  建立和删除文件关联 449

第11章  真的很给力——文件系统编程 451

11.1  文件系统操作 451

11.1.1  列文件目录 451

11.1.2  判断文件(夹)存在 457

11.1.3  文件名操作函数 461

11.1.4  创建文件夹 466

11.1.5  文件的复制、移动和删除 467

11.1.6  获得驱动器信息 470

11.1.7  获得临时文件 475

11.2  获得文件属性 477

11.2.1  文件名属性 477

11.2.2  文件大小和文件属性 478

11.2.3  文件时间属性 480

11.2.4  文件属性对话框 483

11.2.5  文件类型字符串和文件图标 484

11.3  打开/保存文件对话框的通用模块 491

11.3.1  打开/保存文件对话框的相关API函数 491

11.3.2  编写通用模块 494

11.3.3  通用模块使用实例 503

11.4  浏览文件夹对话框的通用模块 505

11.4.1  浏览文件夹对话框的相关API函数 505

11.4.2  编写通用模块 507

11.4.3  通用模块使用实例 509

11.5  制作自己的简易资源管理器 509

第12章  非“程”勿扰——其他常见系统功能 518

12.1  运行应用程序 518

12.1.1  运行程序或打开文档 518

12.1.2  运行程序并等待程序结束 522

12.1.3  程序实例 528

12.2  监视Windows剪贴板 530

12.2.1  剪贴板查看器和查看器链 530

12.2.2  使VB程序具有剪贴板监视功能的通用模块 532

12.2.3  剪贴板监视程序举例 536

12.3  设置系统热键 537

12.3.1  设置系统热键的有关知识 538

12.3.2  实现系统热键通用模块的完整代码 541

12.3.3  程序实例 548

12.4  添加系统托盘图标 550

12.4.1  相关API函数 550

12.4.2  实现系统托盘图标通用模块的完整代码 552

12.4.3  程序实例 557

第三篇  应用模块篇

第13章  我是勤奋的“猪”,我很乖——智能组合框 562

13.1  智能列表项维护 562

13.1.1  类模块对象与组合框控件的关联 562

13.1.2  不重复地添加列表项 563

13.1.3  列表项的保存和加载 565

13.2  实现按汉字拼音字头的中文自动输入 568

13.2.1  实现原理 568

13.2.2  获得汉字的拼音字头 570

13.2.3  查找拼音字头 572

13.2.4  实现按拼音字头自动输入 573

13.2.5  自动提示 575

13.3  智能组合框的其他功能 578

13.3.1  返回或设置下拉列表是否被拉下 578

13.3.2  设置下拉列表的高度 579

13.3.3  获取或设置下拉列表的最小宽度 579

13.4  智能组合框应用实例 580

第14章 “时”上编程——用API 函数实现定时器 583

14.1  用API函数创建定时器的通用模块 583

14.1.1  定时器简介 583

14.1.2  使用API函数创建定时器 584

14.1.3  定时器支持模块mdlTimerSupport 585

14.1.4  定时器类模块clsTimer 587

14.2  定时器通用模块应用实例 590

14.2.1  类模块内的定时器使用 590

14.2.2  标准模块内的定时器使用 591

14.3  通过定时器变通实现多线程 592

  

第15章  谁说这事不能说太细——进度指示 595

15.1  编写长时间运行程序需注意的主要问题 595

15.2  使程序在运行途中响应用户按下【取消】按钮 599

15.3  开发工作助手类模块clsOperAssistant 601

15.3.1  数据定义 601

15.3.2  更新进度指示 606

15.3.3  显示简短提示文本 610

15.3.4  响应用户中途取消 611

15.3.5  出错提示 613

15.3.6  程序开始和结束 613

15.3.7  清除方法Clear 615

15.3.8  类模块的Initialize和Terminate事件过程 616

15.4  工作助手类模块的应用实例 616

15.5  开发指示进度窗体 618

15.5.1  指示进度窗体的运行效果和调用 618

15.5.2  在工作助手类模块中添加驱动窗体的代码 619

15.5.3  开发frmWorkingAvi窗体 621

第16章  边界条约用户定——实现运行时控件的边框调整 629

16.1  解决边框调整问题的基本思路 629

16.1.1  通用模块的使用 629

16.1.2  Frame 控件的作用 630

16.1.3  控件大小位置的重新调整 631

16.1.4  上下型和左右型风格 632

16.2  开发边框调整的通用模块 633

16.2.1  控件关联 633

16.2.2  有关的数据定义 635

16.2.3  重新安排控件大小和位置 642

16.2.4  处理分隔线拖动事件 644

16.2.5  类模块的Initialize和Terminate事件过程 648

16.3  边框调整通用模块应用实例 648

第17章 “泡泡”几时有,自己编程瞅—— 自己编程实现气泡提示框 653

17.1  制作气泡型窗体 653

17.1.1  制作气泡型窗体的基本思路 653

17.1.2  制作气泡型窗体实例 656

17.2  气泡提示框的通用模块 658

17.2.1  窗体的界面设计 659

17.2.2  气泡样式和图标类型的枚举类型 659

17.2.3  属性和常量定义 662

17.2.4  显示气泡提示 664

17.2.5  指向控件的气泡提示 676

17.2.6  气泡提示的关闭 677

17.2.7  窗体的加载和卸载 677

17.3  气泡提示框程序实例 678

第18章  乱“式”英雄——具有高级功能的表达式计算 680

18.1  表达式计算的算法简介 680

18.2  clsCacuExp类模块的数据定义 682

18.2.1  数据类型 682

18.2.2  表达式“解析”与表达式元素 684

18.2.3  表达式中的常量元素 686

18.2.4  表达式中的变量元素 687

18.2.5  运算符和函数的常量定义 690

18.2.6  表达式字符串属性 696

18.2.7  计算结果属性 697

18.2.8  错误信息属性 698

18.3  clsCacuExp类模块的功能代码 699

18.3.1  表达式解析 699

18.3.2  表达式计算 713

18.4  clsCacuExp类模块的使用实例 725

索引 727

参考文献 734

??

??

??

??

XIV  老兵新传:Visual Basic核心编程及通用模块开发

目录  XIII