图书前言

前    言

  相信很多读者都有“书本上学到的编程知识与实际开发中的应用相差很大”的感受。在软件的开发实践中,怎样实现一些功能或如何解决一些问题很多时候都是无法从教科书上找到答案的。本书正是面向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是:zhni2011@163.com。

??

??

??

??

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

前言  III