之前学习的C# 现在由于工作需要 学习VB 6.0 请推荐VB6.0 的书籍 谢谢

解决方案 »

  1.   

    谭老师,有本VB入门的书,我觉得挺好,还有多逛逛CSDN的博客吧,有很多好的VB入门教程。
      

  2.   

    人民邮电的 Visual Basic 6.0 编程指南
    清华大学的 Visual Basic 6.0 中文版傻瓜书
    都是很老的书,可以找电子版,或者去图书馆借。
      

  3.   

    《老兵新传:Visual Basic核心编程及通用模块开发》(清华大学出版社),上个月出版的,好像不错的样子,介绍网址是
    http://www.tup.com.cn/book/Showbook.asp?CPBH=043360-01&DJ=89
    很实用吗? 
      

  4.   

    1、《Visual basic 6.0 WIN32 API 程序设计》,清华大学出版社,刘炳文,李凤华:
    http://blog.csdn.net/chenjl1031/article/details/6408730
    2、《高级Visual basic 编程》,Matthew Curland
    http://download.csdn.net/detail/veron_04/1371398
      

  5.   

    《Visual basic 6.0 WIN32 API 程序设计》:
    本书通过大量实例,介绍了如何在Visual Basic 程序设计中使用Win32 API函数。Windows应用程序接口(API)是可视化编程工具功能的扩充和延伸。本书通过大量实例,介绍了如何在Visual Basic程序设计中使用 Win32 API函数,内容包括:API函数的声明和参数传送、资源文件、窗口、Windows消息控制、设备环境(DC)、GDI对象、光标、位图与光栅运算、字体与文本、多媒体程序设计、注册表、进程通信等。本书提供了大量在软件开发中十分重要而用Visual Basic 无法实现的功能,可供具有Visual Basic 程序设计基础何一定实践经验、需要进一步深入了解Visual Basic,进行较高层次开发的高级用户使用。我个人认为这本书编的很好,它不同一般的API书籍,很多书一味地教你这个函数这样调用,参数应该怎样传送,说白点就是一个API函数说明。还不如直接看MSDN好过。这本书不但教你怎样做,而且教你为什么应该这样做,讲解了大量的Windows消息系统原理,而实例又有很大的实用性。是一本不可多得的好书,建议有VB基础的,想在VB中精通API函数的朋友看看。一定受益匪浅。
    本图书介绍:http://product.china-pub.com/3499#ml
    本书电子书下载:http://www.ebookdown.net/UploadFile/2007-4/20074260150345.exe本书目录:第1章 概述 
    1.1 静态链接与动态链接库 
    1.1.1 静态链接 
    1.1.2 动态链接库 
    1.1.3 动态链接库与api函数 
    1.2 visual basic与 windows 
    1.2.1 visual basic和windows的基本特性 
    1.2. 2 windows窗口 
    1.3 win32 api简介 
    1.3.1 窗口管理函数 
    1.3.2 图形设备接口 
    1.3.3 系统服务 
    1.3.4 其他函数 
    1.4 在visual basic中使用动态链接库 
    1.4.1 声明 
    1.4.2 visual basic 6.0中的 api函数声明 
    1.5 api文本浏览器 
    1.5.1 api浏览器的使用 
    1.5.2 把声明、常量或类型拷贝到visual basic代码中 
    1.6 api调用举例 .1.6. 1 调用api绘图函数 
    1.6. 2 文本输出 
    1.6.3 环境设置 
    1.7 句柄 
    1.7.1 什么是句柄 
    1.7.2 窗口句柄 
    1.7.3 设备环境句柄 
    1.8 如何找到所需要的api 
    第2章 win32 api函数调用 
    2.1 字符集 
    2. 1.1 win32 api使用的字符集 
    2. 1.2 visual basic与字符集 
    2. 2 字符串参数的传送 
    2.2.1 visual basic字符串与api字符串 
    2.2.2 字符串数据的传送 
    2.2. 3 系统平台与字符串传送 
    2. 3 any类型数据的传送 
    2.4 数组与自定义类型数据的传送 
    2.4.1 数组的传送 
    2. 4. 2 自定义类型数据的传送 
    2.5 其他数据的传送 
    2.5. 1 数值数据的传送 
    2.5. 2 变体与对象 
    2.5.3 指针与属性 
    2.6 api函数调用总结 
    2. 6.1 数据类型转换 
    2.6.2 含有api函数的应用程序的调试 
    第3章 资源文件 3.1 资源文件的建立 
    3.1.1 资源的定义 
    3.1.2 编译源资源文件 
    3.2 与使用资源文件有关的函数 
    3.2. 1 由 visual basic提供的函数 
    3.2.2 api函数sndplaysound 
    3.3 在visual basic应用程序中使用资源文件 
    第4章 窗体与窗口 
    4.1 窗体标题栏的控制 
    4. 1.1 使标题栏闪烁 
    4. 1.2 隐藏/显示标题栏 
    4.1.3 禁用最大化、最小化和关闭按钮 
    4. 1.4 移动没有标题栏的窗体 
    4. 2 改变窗体形状 
    4. 2.1 圆形或椭圆形窗体 
    4. 2.2 多边形窗体 
    4.3 浮动窗体与透明窗体 
    4. 3.1 浮动窗体 
    4.3.2 透明窗体 
    4. 4 动态打开和关闭窗口 
    第 5章 windows消息系统 
    5. 1 基本概念 
    5.1.1 什么是消息 
    5. 1.2 消息的控制 
    5.2 visual basic事件与 windows消息 
    5.2.1 从消息到事件 
    5.2.2 预定义窗口程序 
    5.3 回调函数 
    5.4 增强窗口程序的功能 
    5.4.1 工作原理 
    5.4.2 程序举例 
    5.5 鼠标与键盘类消息 
    5. 5.1 鼠标类消息与键盘类消息 
    5. 5.2 wm_nchittest消息 
    5. 6 消息的截获与处理 
    5.6.1 截获单个窗口消息 
    5.6.2 截获多个窗口消息 
    5.7 常用windows消息详解 
    5. 8 窗口消息举例 
    第6章 控件消息 
    6.1 消息的发送 
    6.1.1 与发送消息有关的函数 
    6.1.2 用消息函数发送消息 
    6.2 编辑控件消息 
    6.2.1 编辑控件的通知消息 
    6.2. 2 编辑控件消息 
    6.2.3 程序举例 
    6.3 列表框消息 
    6.3.1 列表框消息的分类 
    6.3.2 列表框消息 
    6.3.3 列表框消息举例 
    6.4 组合框消息 
    6.4.1 组合框消息 
    6.4.2 组合框消息举例 
    6.5 按钮控件消息 
    6.5.1 常用按钮控件消息 
    6. 5.2 程序举例 
    第7章 设备环境(DC) 
    7.1 剪裁与坐标转换 
    7. 1.1 剪裁 
    7. 1.2 坐标转换 
    7.2 使用设备环境 
    7.2.1 设备环境的属性和分类 
    7.2.2 在visual basic中使用设备环境 
    7.3 设备环境与窗口 
    7.3.1 设备环境的获取和释放 
    7.3.2 程序举例 
    7.4 设备环境信息 
    7.4.1 getdevicecaps函数 
    7.4.2 获取设备环境信息 
    7.5 自定义设备环境 
    7. 5.1 建立和删除(释放)设备环境 
    7.5. 2 程序举例 
    7. 6 应用举例 
    7.6.1 制作放大镜 
    7.6.2 在设备环境之间转移图像 
    7.6.3 背景制作 
    第8章 图形设备接口(GDI) 
    8.1 缩放和坐标系统 
    8. 1.1 逻辑坐标与设备坐标 
    8.1.2 映射模式 
    8.1.3 视口 
    8.2 visual basic与 gdi对象 
    8. 2. 1 visual basic绘图与 api绘图 
    8.2.2 gdi对象与 visual basic 
    8.3 画笔 
    8.3.1 建立和删除画笔 
    8.3.2 画笔程序举例 
    8.4 刷子 
    8.4.1 刷子的种类和原点 
    8.4. 2 建立刷子 
    8.4.3 刷子程序举例 
    8.5 绘图函数 
    8.5. 1 api绘图函数概览 
    8.5. 2 贝济埃(bezier)曲线 
    8. 5.3 像素 
    8.6 区域 
    8.6.1 区域与剪裁 
    8.6. 2 建立区域 
    8.6.3 区域组合与填充 
    第9章 位图、图标与光栅运算 
    9. 1 位图 
    9.1.1 像素 
    9. 1. 2 颜色与设备 
    9.2 与设备有关的位图 
    9.2. 1 与设备有关的位图的格式 
    9.2.2 使用与设备有关的位图 
    9.3 建立与设备有关的位图 
    9.3.1 相关的 api函数 
    9. 3.2 程序举例 
    9.4 图标与光标 
    9.4. 1 图标 
    9.4. 2 光标 
    9.5 光栅运算 
    9.5.1 什么是光栅运算 
    9.5.2 预定义光栅运算 
    9.5.3 在bitblt函数中使用预定义rop 
    9. 6 图案 
    9.6.1 图案的建立 
    9.6. 2 程序举例 
    9.7 应用举例 
    9.7.1 设计图像显示效果 
    9.7.2 图像的翻转、放大和缩小 
    9.7. 3 使屏幕变暗 
    第10章 字体和文本 
    10. 1 字体概述 
    10. 1.1 字体及其分类 
    10. 1.2 字体的宽度与大小 
    10.2 字体家族与字体属性 
    10.3 字体资源 
    10.3.1 字体的添加和删除 
    10.3.2 程序举例 
    10.4 字体对象 
    10. 4. 1 建立逻辑字体 
    10.4. 2 程序举例 
    10.5 文本输出 
    10.5.1 文本的描绘 
    10.5.2 文本输出函数 
    10.6 程序举例 
    10. 6.1 以不同的方式输出文本 
    10. 6. 2 文本旋转 
    10. 7 字体信息 
    10.7.1 字体信息函数 
    10.7. 2 程序举例 
    第11章 多媒体程序设计 
    11.1 概述 
    11.1.1 什么是多媒体和多媒体系统 
    11.1.2 多媒体元素 
    11. 2 visual basic的多媒体程序设计 
    11. 2. 1 windows高级多媒体服务 
    11.2.2 visual basic的多媒体支持 
    11. 3 api多媒体函数 
    11.3.1 与多媒体有关的高级接口函数 
    11.3.2 高级接口函数的使用 
    11.4 mci指令的构成和使用 
    11. 4.1 mci指令的构成 
    11. 4. 2 mci指令的使用 
    11. 5 mci系统指令 
    11. 6 mci音频指令 
    11. 6. 1 音频指令详解 
    11. 6.2 程序举例 
    11.7 mci midi指令 
    11. 7.1 midi指令详解 
    11.7.2 程序举例 
    11.8 mci avi指令 
    11.8. 1 avi指令详解 
    11. 8.2 程序举例 
    11.9 mci cd audio指令 
    11.9.1 cd指令详解 
    11. 9.2 程序举例 
    11. 10 播放多种媒体文件 
    第12章 文件与系统 12.1 文件属性 
    12.1.1 获取和设置文件属性的api函数 
    12.1.2 程序举例 
    12. 2 文件的其他信息 
    12.2.1 有关的api函数 
    12.2.2 程序举例 
    12.3 文件的拷贝与删除 
    12.3.1 shfileoperation函数 
    12.3.2 程序举例 
    12.4 文件查找 
    12. 5 系统信息 
    12. 5.1 获取系统信息的api函数 
    12. 5.2 程序举例 
    12. 6 键盘控制 
    12.6.1 键盘信息 
    12. 6. 2 屏蔽ctrl+alt+del和alt+tab键 
    12.7 屏幕区域与分辨率 
    12. 7.1 相关函数和结构 
    12. 7.2 程序举例 
    第13章 注册表 
    13.1 概述 
    13.1.1 什么是注册表 
    13. 1. 2 注册表结构 
    13. 2 项的句柄 
    13.2.1 打开(建立)注册表项 
    13. 2.2 程序举例 
    13.3 读取注册表项的值 
    13. 3. 1 读取注册表项的默认值 
    13.3.2 读取注册表项指定名称的值的数据 
    13.4 设置和删除注册表项的值 
    13.4. 1 相关api函数 
    13. 4. 2 程序举例 
    13.5 读取指定项中所有的值 
    13.5.1 regenumvalue和expandenvironmentstrings函数 
    13.5.2 程序举例 
    13.6 访问注册表项 
    13. 6.1 枚举子项 
    13.6.2 注册表项的删除 
    13. 7 用注册表编辑程序建立和读取注册表数据 
    13.7. 1 建立注册表项并写入数据 
    13. 7.2 输出注册表数据 
    13.8 应用举例 
    13.8.1 文件关联 
    13.8.2 启动windows时自动执行指定的程序 
    13.8.3 保存和恢复窗体的大小 
    第14章 进程通信 
    14.1 windows中的信息交换 
    14. 2 系统对象与同步对象 
    14. 2. 1 系统对象 
    14. 2.2 同步对象 
    14. 2. 3 进程与线程对象 
    14.3 “唤醒”挂起的进程 
    14. 3.1 相关的api函数 
    14. 3.2 程序举例 
    14. 4 应用程序的启动与结束 
    14.4.1 启动应用程序的api函数 
    14. 4.2 程序举例 
    14. 5 管道 
    14. 5.1 什么是管道 
    14.5.2 管道函数 
    14.6 管道应用举例 
    14.6.1 用管道传送字符 
    14. 6.2 通过管道传送文件 
    附录1 函数索引 
    附录2 程序示例 
      

  6.   

    《高级Visual basic 编程》,Matthew Curland
    这本书好像是翻译的,看不太懂
      

  7.   

    《老兵新传:visual basic核心编程及通用模块开发》 目录
    目录《老兵新传:visual basic核心编程及通用模块开发》 第一篇 高级技术篇 第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章 搞定这个怕什么?你懂我的—— 菜单高级控制和菜单选择助手        3989.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 
      

  8.   


    第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 前言
      相信很多读者都有“书本上学到的编程知识与实际开发中的应用相差很大”的感受。在软件的开发实践中,怎样实现一些功能或如何解决一些问题很多时候都是无法从教科书上找到答案的。本书正是面向Visual Basic编程和开发实践,直接介绍如何实现软件中的实际功能,直击编程时的各种疑难问题,解决难题,帮你铺路!   谁说Visual Basic不如人?   笔者见过不少程序员,他们讨论最多的是使用什么语言来编程,使用什么语言做开发,似乎他们对使用何种语言很敏感:使用“时髦”的语言似乎能提高自己的技术含量,使用“传统”的语言似乎有碍自己的开发水平。然而事实是这样吗?计算机语言的发展相当迅速,许多崭新的程序设计语言不断涌现,现有语言之间的竞争又此起彼伏,今年某某语言比较流行,在排行榜名列前茅,而明年这种语言又可能被其他语言所打败。许多程序员就在语言的选择之间辗转,刚刚接触到一门语言,还没来得及彻底搞懂,就发现这种语言“过时”了,更新的语言出现了,于是就转向另外一种语言;而新的语言没学多久,发现又有了更新的语言……他们总是把焦点放在选用何种语言上,频繁地在语言的切换中追赶所谓的“时髦”,虽然“了解”(不能达到掌握)的语言不少,可是没有一种能够精通,也没有一种能够得心应手地使用,真正地把它应用到解决实际问题的程序设计中。 
      不可否认,一款好的程序设计语言会提高编程的效率,结构清晰、语法严谨、支持面向对象等的特性不仅可以使程序的开发事半功倍,而且使编译后的可执行程序的运行效率也会提高。然而使用一种“最新”的语言就意味着这个程序员能力很强、很优秀吗?我也见过不少真正很优秀的程序员,或者真正的编程“高手”,他们对待语言种类的选择是很淡漠的。他们经常说使用何种语言开发都是一样的,事实上他们也完全有能力在很短的时间内快速地掌握一门新的语言,并能很快地将这种语言使用到自己的项目开发中。这种能力不是所有程序员都具有的,那么这种能力来自何处?这些编程“高手”都有一个共同点:虽然可以掌握数种语言,但他们都有一种或少数几种是自己最“精通”的,是自己用起来最得心应手的。因此“高手”的能力来自于对一门语言的精通,来自于对一门语言的彻底掌握和大量的实践经验!因为不同的计算机语言虽然在语法上会有这样或那样的不同,但在编程思路和算法设计上都有许多相同之处:当彻底地掌握了一种语言的时候,再遇到一种新的语言,只需要了解一下它的语法,再有一本函数手册,不难立即把它用起来! 
      因此,笔者这里想建议的是,我们不要把过多的精力放在考察何种语言是最新的、何种语言是最“时髦”的、或者每年排行第几上,选择自己喜欢的一种语言,彻底掌握它,然后把精力放在如何使用它提高自己真正的编程能力。再大量地基于这种语言编程实践,假以时日你的编程能力就会达到一个很高的层次,到时再掌握任何一种新的语言就都不是一件难事!   Visual Basic(以下简称VB)这种程序设计语言,真可谓是“一波多折”,它受到过许多人的青睐,同时也受到过许多人的“白眼”。VB具有许多优点:比如简单易学、容易上手、封装性好、安全、胜任快速开发、是个人独立开发的首选。这些优点足以成为我们使用VB的理由。因为在当今时代,效率就意味着竞争,一种胜任快速开发的语言就代表着高效率。比尔·盖茨曾自豪地说:“世界上有80%的人在用VB编程!”,“微软肯定大力发展VB,VB当之无愧是Windows平台上最好的开发软件”。 
      然而事物都有两面性,任何一种语言在具有它自身优点的同时,都势必会具有另外的一些缺点,VB也不例外。于是许多人抓住VB的缺点大做文章,不少人把VB冠以“弱语言”、“玩具语言”等的帽子,他们认为“编VB的人太没水平”、“VB没有指针,不能实现复杂的数据结构”、“VB功能太弱,不可能写出系统级的程序”……其实大多这样的人一般都是使用其他语言编程的,对VB仅有少数的了解或者根本没有了解,他们并没有深入地去研究过VB,得出这样的结论是不是过于武断?VB最大的不足是系统提供的功能少,直接由VB开发出的软件不如由Visual C++等语言开发出的功能强大,这一点笔者也不否认,但这只是表面现象,难道真的很多功能用VB做不出来吗?笔者在此要强调的是:VB同样很强大,其他语言能够开发的功能,VB照样能做!本书正是为了增强VB的功能、弥补VB这个所谓“缺点”为目的的,让喜欢VB的读者在当前众多语言的竞争中,仍然能够把VB用起来,发挥出VB应有的生命力!当读完本书后你一定会发现,VB并不弱! 
      怎样才能让Visual Basic强大起来? 
      Visual Basic从诞生之日起已经经历了数个版本的变化,直到现在Visual Basic.Net的出现。Visual Basic.Net具备了面向对象的绝大部分特性,使代码更加方便维护、可扩展性好、支持代码重用等,而且在语法上也做了很多非常有益的改进。因此,有不少VB程序员转向VB.Net。然而,VB.Net与VB相比较有了非常多的变化,并不是VB语言的简单升级,而可以看作是一种崭新的语言,新的VB.Net中有许多内容需要重新学习。VB.Net的程序与VB的程序也有很多不兼容的成份,很多VB程序并不能直接升级为VB.Net,而需要重新编写,这对于先前使用VB开发的大型系统的升级和维护来说无疑是一场灾难!另外,使用VB.Net开发的程序需要用户安装.Net Framework才能运行,程序发布时就不得不带有比较庞大的安装包,这为使用Windows XP或以下操作系统的用户带来许多不便。再有,使用VB.Net开发的程序编译后是“中间代码”,而不是传统意义上的标准Windows可执行文件,这也不能满足很多的开发需求。因此,在当前阶段,尽管VB.Net蓬勃发展,而且代表了未来的一种发展趋势;但就目前形势来看,VB.Net仍无法取代VB,VB语言仍有它的一席之地。总之,要增强VB的功能,或者要解决在VB程序设计中遇到的问题,仍然需要通过VB来解决,而VB.Net是帮不上忙的。因此,本书并不打算介绍使用VB.Net开发程序,而把主要问题仍然放在VB上。 
      那么怎样才能够依靠VB自身,增强VB的功能呢?VB支持Windows API函数的调用,这就为VB具有“无所不能”的本领打下了坚实的基础,因为所有运行在Windows系统下的程序包括Windows本身的运行,都是依靠调用这些API函数的。也就是说,无论使用任何语言编写程序,无论语言本身提供的功能有多少,程序经过编译之后的可执行文件中的机器代码都是用于调用这些API函数。例如,Visual C++很强大,其中的MFC库就是封装的API函数;使用Win32汇编语言开发Windows程序,仅使用汇编语言的基本指令,甚至可以通过直接调用API函数,做出大型的软件!在本书第二章的内容中还要介绍在VB中实现指针,有了指针+API函数,VB就真的可以无所不能! 
      本书与其他书籍最大的不同之处在于,本书不仅介绍具体功能的实现技术和具体问题的解决方法,还讲解在实际编程时尤其是在开发大型软件时必须考虑的细节和必须处理的有可能存在潜在隐患的细微问题,使这些知识直接可以应用于开发实践,减少理论与实践的“脱节”。尤其要介绍如何将实现这些技术的程序代码“封装”成通用的模块,使这些通用模块在以后的编程中可以得到重用。这样,有关API函数的调用和程序的实现细节只需要考虑一次,在以后编程中需要某项功能时,只要把通用模块添加到工程中,然后直接调用模块中的1~2个函数即可轻松实现。通过编写通用模块,不仅大大增强了VB程序的功能,而且减少了以后编程的工作量,程序代码也更为简洁、便于维护。 
      本书所介绍的通用模块大多数具有如下特点:   (1)封装性强:无论标准模块还是类模块都自成一体,具有较强的独立性和内聚性。主要表现在使用局部变量和局部API声明、合理设计模块内函数的功能和参数、对其他模块的依赖很少,像子类操作、函数指针、对象地址、对象关联、资源释放等复杂的操作都被封装在模块内部。今后在开发新的程序时,根本不必考虑这些细节,也不必干预模块内的代码,而只需把模块当做“黑匣子”添加进工程,再通过几个简单的函数调用即可实现功能。   (2)使用方便:通用模块在实现功能时,几乎不需要添加任何引用或任何的ActiveX控件,而仅依靠VB基本的功能或API函数实现。因此模块对各种组件或第三方控件几乎没有依赖,它们只是纯粹的文本代码;也就是说,只要在工程中添加几个纯文本的代码模块即可实现VB程序功能的强大提升。此外,模块的设计本着让主调程序调用负担最低的原则,模块编写好后,主调程序为调用模块功能而编写的代码极少。   (3)功能强大:模块中大量调用了Windows的API函数,并且使用了指针,很多程序还涉及了Windows的核心。可以说Windows能做的,VB都能做!   (4)可重用性强:模块可以被添加到任何工程,又可被用于工程中的任何窗体、模块和类模块中。   (5)便于开发绿色软件:本书所介绍的通用模块一般属于类模块和标准模块,还有少量窗体模块,而本书不准备介绍任何ActiveX控件的开发。因此使用本书所介绍的通用模块编写VB程序,很少或不需任何额外的引用或ActiveX控件的支持,在程序发布和安装时也不必包含过多的系统文件或注册组件。实际上使用这些通用模块所开发的应用程序在Windows 2000及以上系统可以直接运行,根本不需要打包安装程序和制作setup。 
      开发通用模块,实际上是丰富了VB程序员可以使用的函数库和类库,这相当于是在VB的基础上搭建了一套自己的开发环境。而这一套开发环境提供的功能,有很多比其他语言提供的还要强大,但使用起来却比其他语言还要容易。这就使得用VB语言开发的程序不仅不逊色于其他语言,而且更有着VB简单易学、容易上手的特点作为支持,在开发速度上也会比使用其他语言还要快。 
      本书适合的读者   本书是介绍使用Visual Basic做高级开发的书籍,适合对Visual Basic已经有了基本的掌握,想进一步提高Visual Basic编程能力,以及在编程中遇到一些令人头疼的问题而正在寻找解决方案的读者。对使用其他语言开发Windows程序的读者来说,书中的许多方法和编程技巧也会对他们有一定的参考价值,因为无论用什么语言开发,Windows的运行机制是不变的,程序的设计思路也都是可以借鉴的。本书假定读者已具有以下知识: .  对Visual Basic已经有了基本的掌握,如常用控件的使用、程序结构、变量、语句、函数、对象的属性、事件、方法等,已经能够用Visual Basic编写简单的程序,因为本书不会涉及这些基本的Visual Basic编程方法;   计算机基础知识的一般了解,如进制转换、内存、指针等;   最基本的C语言的基础知识,因为Windows API函数是用C语言编写的,为了能够读懂参考资料,读者需要了解一些最基本的C语言知识;但读者不需要完全掌握C语言,只需要了解可能用到的C语言常量、变量、数组、结构体、指针等数据类型和简单的函数结构。
      关于本书的内容   本书分为三个篇章:   第一篇:高级技术篇   本篇介绍使用Visual Basic进行高层次软件开发和解决实际问题的技术,这些技术在本书后续章节的内容中也会被大量用到。例如:如何在VB中使用指针、开发常用的数据结构模块、开发实现子类技术的通用模块、Windows窗口、控件、消息的运行机制、如何通过API函数创建控件、如何开发支持多国语言版的程序等。在本篇章节中还将介绍如何解决VB编程时一些常见的并很棘手的问题。这些技术大多是以编写为“通用模块”的形式实现的,使技术细节只需考虑一次,在以后的编程中可以直接把“通用模块”当做“黑匣子”来调用。 
      第二篇:功能模块篇   本篇介绍如何在VB中编写一些通用的功能模块,以帮助开发人员实现VB系统不曾提供的、但开发软件时却常需要实现的重要功能,并胜任快速开发:如增强图形界面、菜单高级控制、文件操作、注册表操作、系统热键、系统托盘图标等。这些模块大多也可以看作是对API函数的封装,实现这些功能的API函数都被自己编写的、调用起来更为方便的简单函数所替代。这在以后的编程中,再不必考虑细节,并简化程序设计,大大减少编程工作量,提高开发效率。 
      第三篇:应用模块篇   有一句格言讲到:“一个具体的问题胜过数千个抽象的方案”。本篇就针对在软件开发时可能遇到的具体编程问题,每章开发一个通用模块,实现软件中一个常见的功能。限于篇幅,本篇只介绍有代表性的几种功能的通用模块实现,如智能组合框、定时器、进度指示工作助手、控件的边框调整、气泡提示、表达式计算等。希望读者能够举一反三,并自己开发出更多的通用模块,使这些模块能够像“积木”一样被积累,在需要时可随时被添加到VB工程中使用,为自己的VB编程实践和软件开发添砖加瓦。   读过本书后,相信广大的Visual Basic编程人员和VB爱好者,尤其是使用Visual Basic语言做软件项目开发的读者,一定会有所收获。 
      致谢   首先要感谢南开大学生命科学学院张涛教授、数学院阮吉寿教授以及医学院杨卓教授对本书写作的大力支持,感谢三位恩师多年来在学习和生活上无微不至的关心和帮助,他们活跃的科研思维和严谨的工作态度一直深深影响着我。   感谢我的父母、岳父岳母和家人,他们总是默默地支持我,生活上悉心地照顾我,为我分担压力。特别要感谢我的妻子佳佳,为了能按时完稿,她牺牲了逛街的时间,放弃了蜜月旅行,在写作的过程中一直陪伴着我,给我鼓励、勇气和信心。   由于笔者水平有限,错谬之处在所难免,恳请专家和广大读者不吝赐教、批评指正。笔者的E-mail是:[email protected]。 
    精彩书摘  3.3 哈希表
      3.3.1 什么是哈希表
      3.3.1.1 提出问题  在程序设计中,经常需要维护一个列表,比如学生列表、货品列表、窗体列表等。对这些列表最频繁的一种操作是能够通过给定的一个编号快速地找到项目。例如给定一个学生的学号,就能快速找到该学生的数据;给定一个窗体的编号,就能快速定位到窗体以便对窗体进一步操作(如将窗体显示出来)等。也就是说这类列表中的每项数据是由两部分组成的:一是可以惟一标识本条数据的一个编号,二是数据本身。我们把前者这种可以惟一标识一条数据的编号称为键,后者称为数据或值。因此问题可以概括为:维护一个列表,给定一个键后,能快速地找到对应的数据。  这可以通过数组来实现,比如把学生、货品、窗体等信息存放到数组中,数组的下标就是键,即把数据存储到与编号相同下标的空间中。如果给定了学号、货品号、窗体编号,就是给定了数组的下标,通过数组的下标可以直接找到数组元素。然而,这里有一个问题是:
      学号、货品号、窗体编号等可能是一个很大的数字,例如学号可能是8位数字,那么定义的数组就至少应该有108个元素,而实际学生人数远没有108个。也就是说实际数据只占用了数组的很小一部分,在“数据结构”中称这个数组是稀疏的(sparse)。显然采用上述这种数组的存储方法将大量浪费存储空间。
      VB中有一种Collection对象也可以用于处理这类数据,Collection对象中的每个元素可以有一个键和一个值。通过Item方法给定一个键作为参数就能快速地返回数据。然而Collection对象的效率很低,处理少量数据尚可,当处理的数据量很大时,会严重影响程的效率,稍后还要讨论这个问题。