我是一个VB初学者,但在网上看到API,看了很久,但还不知道如何使用!
解决方案 »
- 付费求做一个用VB做的小软件,能够对制定数据库进行小小的操作,1000元报酬有愿意的联系我380360410
- 一个关于vb做的木马服务器端生成exe文件的问题
- 稍微复杂点,小弟刚学几天,多多指教
- 连接数据库效率问题
- 打印问题.
- ####其请大家推荐几本VB的书!(来者有分!)
- 请问如何在程序中修改MSHFLEXGRID的列宽
- 关于DATA控件的问题(急!!)
- VB,请问set obj=new class 和 dim obj as new class的区别?????????
- vb中如何将unicode转换为ansi
- 在vb中如何实现与window中右键的"刷新"一样的功能呢?
- AddressOf用法
如果将API声明加在窗体模块,则属性要改成private
如果加在通用模块里:public
public。
慢慢来,共同努力吧
2002/03/29 14:02 作者:张鸿 电脑爱好者
虽然.NET已经触手可及,然而回顾成熟的Visual Basic以及倾听VB程序员积累多年的编程思想应该还能给我们许多启迪。《感悟》系列作者张鸿(Dareblaze),擅长Visual Basic以及Photoshop,代表作品有著名文本编辑软件NaviEdit(http://www. neocactus.com)。
Visual Basic是以Basic语言为基础的语言,十分简单易学,只要稍有语言基础就可以很快掌握。它的可视化的用户界面、点击与拖动式的程序设计方式、完善的即时提示功能和丰富的控件让程序设计人员可以非常方便快速地开发出一个完整的程序。而且到了Visual Basic 6.0,Internet应用程序、数据库应用程序的开发变得更加容易,可以说是非常优秀的开发工具。但是在我几年的开发过程中,仍发现有许多VB用户不知如何正确使用这个工具,有的人因为无法用它开发出功能强大的软件而对它产生疑惑。这篇文章的目的就是做一个总体性的指导,让许多正在初学VB的人有一个比较明确的方向。
一、什么时候要用到VB
我学VB以来从国内许多编程论坛可以看到,“要不要学VB”这个问题问的次数实在太多了,回答有“VB已经过时”,有“VB太慢”,有“VB不能进行底层控制”,有“VB不是真正的面向对象”,也有“VB没有指针,不学也罢”……先不论这些回答是否正确,如果一定要我来回答,我一定会说:“你用得着VB吗?那就学吧”。
那么什么时候要用到VB?
“VB已经过时”这样的回答只要仔细想一想就知道不可信,写程序不是为了跟潮流,只要VB程序还能够在新系统上使用,那就没有过时;如果说VB慢,不能进行底层控制,我十分赞同,不过我要先问一下各位的VB程序都是做什么的?是做PI的运算(指3.14159……)?是做大型数据处理?是做操作系统?还是做硬件驱动?非要那么高的速度不可?一定要从底层控制才能运行?在Win32时代,根据所写程序的需要选择一种合适的语言才是你最应该做的事。
我认为,在对速度要求不是很高、不需要直接控制硬件、对程序编译后的体积要求不十分严格的情况下,VB都能派上用场。特别是需要快速开发的情况下,使用VB 是十分合适的。
二、如何学会VB
看我上面把VB说得好像还挺不错,不过要学好它也并非随随便便就能做到的。
因为VB的语言基础是Basic,所以前提是要对Basic语言熟悉。然后在学VB之前,最好能买到一本不错的书,一边跟着示例做,慢慢接受VB程序的编写形式。如果你不幸买到一本烂书(比如我),那也没什么好担心的,书里的示例一定会有的,也可以看VB的帮助(建议使用MSDN,需要另外购买,以前是双CD的,现在最新的有三CD。或者也可以看VB5的联机手册,但内容就只限于VB了,对于API等东西没有详细的说明),照着做不多久你就知道一个VB程序是靠事件来驱动的。当初我做的第一个VB程序就是看VB5的联机手册做的。
接着应该找一个项目来完成,不要太难,而要贴近自己的实际,比如做一个资源管理器,做一个小小的文本工具,或者做一个文件分割程序等,别人做过不要紧,重要的是你没有做过。不要幻想马上就可以做个多么好的程序出来,要相信罗马不是一天建成的。在这段时间里你可以慢慢学会使用VB IDE(VB集成开发环境)这个系统,并且熟悉一些经常用到的东西,对你以后的进步是很有帮助的。遇到困难不要管它多难,都应该先自己想办法解决,把写程序当作解决一堆未知的难题来看待。如果自己实在解决不了,就找别人问,不要管别人如何数落你说你多么笨多么蠢,没有人一出生就会讲六国语言。别人也无法帮你解决的,不妨先把问题放一边,其他地方先完成,再一边自己慢慢想。另外记得在这个时候学学COM(到 VB里其实就是ActiveX了)。
如果完成了这一步,你一定很有成就感,你已经入门了,你会觉得原来VB要入门很容易。
不过,入门是几段?实在太浅了吧!对呀,所以这个时候把你喜欢用的一些小工具找出来,列一个表,然后自己一个个攻破,慢慢使你的程序可以代替或在某些时候代替你原来的工具(不过并无必要把所有的工具做出来,练习到你可以熟练使用VB这种语言就可以了)。要做到这样,相信你会觉得能力不足(当然,那些不适合用VB写的软件就不要去做了吧),不过不要太多担忧,你应该在这个时候找一本详细说明VB函数的书来做参考,你会发现原来许多问题都有现成函数可以帮你解决; 另外要学会使用自己的方法代替一些用起来不怎么灵活的函数,慢慢建立起自己的一套函数库,有空的时候,把自己写过的函数看上几遍,看看能不能再改进。
我相信你是在慢慢进步的,所以有时你有一种想法,但VB提供的方法和函数似乎无法达到你的要求。这就对了,你需要学一学API。
上网找一些API的使用示例、详细说明,然后把学会如何在VB里使用API当做你初学阶段的最后一门学科去攻破吧(其实用不了几小时甚至几十分钟)。也可以暂时找 OCX控件来使用,不过一定不要太依赖别人的OCX,不然是不会有进步的。
可能你会问:VB有应用程序向导,为什么没有提到它?的确,VB的应用程序向导是很不错,但在你学会使用VB这种语言之前我还是建议你不要使用(它主要是用来方便快速地建立一个应用程序的框架的)。要从最基础的地方做起,不然一开始你可能搞了很久都不知一个程序是从哪里开始执行,哪里结束的。
你发现在这篇文章里没有提到一点VB程序的技巧。没错,我不会现在告诉你,因为你现在需要的是知道应该如何去学,用什么方法来学。至于学的内容,(小声地)我要给下次骗稿费提供一个机会嘛(原来,是西红柿……我闪)。
2002/03/29 14:09 作者:张鸿 电脑爱好者
编写程序时,经常遇到的问题就是VB给我们准备的东西我们会用,控件组装组装就是一个程序,然而一旦想要实现VB没有直接提供的功能,就会不知所措。其实Windows操作系统本身就给我们准备了许多东西,VB没有的,或许Windows有。我们当然希望少花力气,多得效果。这里要讲的内容就是——学会利用Windows给我们的东西:API。
然而,学会一种东西是需要付出相当的努力的,API也一样,它可以给我们带来很大的方便,但想要掌握它,就不是使用几个控件那么轻松的事了。所以在看这篇文章时,希望读者可以抱一个正确的态度,就是学习编程不是为好玩,而是为使用; 不要以自己对这方面是否有兴趣而看,而要为API是否能为你的程序带来效果而看。我并不是说一切都是那么严肃和困难,只是API对VB来说,已经可以算高级方面的应用了,所以“认真”和“仔细”是需要的。好了,放松一点,让我们从现在起一步步领略API的好处吧。
前言
1.API
API全称为Application Programming Interface,直译的话可叫它“应用程序接口”。从意义上来说,API是一个操作系统或某个程序本身提供给其他程序使用的函数。在Windows操作系统中,有成千个Windows的函数提供给应用程序使用,本文所说的API,就是指这些函数。
2.VB与API
之所以写这篇文章(而不写VC或其他语言),是因为VB对API的支持不是直接的,而且是不完全的; 在使用上,Windows的API编写时是假设调用者是C或C++语言,因此VB调用API不是很方便,也经常有不必要的错误或不明白如何使用的情况出现。本文的对象主要还是对API没有很深研究的读者,如果你不想了解太多细节,你可以把一个合适的函数用法搬过去,或者你完全不知道API,或者只知道少数,对许多函数还不清楚如何使用,或者你希望可以从本文学到更多使用API的技巧甚至VB的技巧(但愿我可以让你学到),我想你都应该看这篇文章。但还是有个大前提,你必须是已经会使用VB的读者,因为以后讲到的内容不会有一个完整工程从头到尾教你做,有可能是一段简短的声明与调用代码,也可能是几个函数的组合,如果必要的话,也会讲述相关内容的VB技巧,但一定不会有完整的实例示范。
3.本文原则和约定
由于API中有的用法简单有的复杂,有的可单独使用有的却不行,加上各个API的主要用途不同,很难判断先说哪个再说哪个可以让人更容易理解,因此本文尽量从比较常用的说起,从可以对程序产生较大作用的说起。为了能让多数人理解,如果需要涉及到其他方面的知识,也将尽量讲述,让读者可以学到使用API的知识,并能够利用本文中的知识应付新的API。如果你对某个API有什么疑问,欢迎来信。
2002/03/29 14:12 作者:张鸿 电脑爱好者
第二话 字符串 上一期我们已经对API有了大概了解,并学习了第一个API。为了方便以后的学习,我就先讲一点字符串知识和一个相关的API。 用过VB5.0或者更早版本的读者应该知道VB有一个测试字符串长度的函数: Len。但当你升级到VB6时,会发现这里的Len并没有以前那么好用了——它变成了测试字符个数而不是字符串长度。就是说,当你用以前版本的VB执行Len("字符abc")时,返回值是7,因为中文字符每个有2个字节,所以总共有7个字节;而在VB6中执行,返回值是5。VB6不再有一个直接计算出字符串总字节数的函数了,因为VB6内部已经把字符串转换成了Unicode——一种比ANSI更新的字符编码方式。 Unicode把每一个字,无论是中文还是其他文字都当成两个字节,如果是英文,则这两个字节中第二个字节保留着不使用,如果是双字节字符(如中文,双字节日文以及韩文),而由这两个字节的组合表示一个字符。所以Len可以方便地知道一共有多少个双字节字符,多少个单字节字符,也就出现了上面所说的情况。不过既然VB内部把ANSI字符转换成Unicode,那么它一定有对应方法转换回来。所以这里提供一个比较方便的方法来得到总字节数: LenB(StrConv("字符abc", vbFromUnicode))。 这里用到了一个LenB() 函数,你可以自己试试它,比如 LenB("字符")、LenB("abc")、LenB("字符abc"),会发现返回值分别是4、6和10。为什么是4、6和10呢?我说过VB内部把ANSI字符转换为Unicode,每个Unicode字符用2个字节来表示,所以,LenB() 的作用是返回字符串的实际字节数。但是,这个实际字节数已经不是我所输入的字符串的,而是被VB转换过的(我们无法让VB函数在转换之前先算好长度),所以我们需要先把字符串转换回来,使用的是 StrConv() 函数。对于这个函数我不想太过详细解释它(一般应用中比较少用),你可以参考MSDN,我只提一提它的第二个参数:vbFromUnicode。 StrConv()函数的第二个函数指定转换的类型,vbFromUnicode 指定把字符串从Unicode转换回来,如果是vbUnicode,则把字符串转换为Unicode。注意,虽然你的程序中写的是ANSI的字符而不是Unicode字符,但当这个函数执行时,它得到的却是已经被转换成为Unicode的字符串了。 现在问题可以算解决了,但我们还需要另一个解决方法,因为这种方法太费时。想想看,每一次算长度都要进行 Unicode->ANSI 的转换,这将会花费太多时间。对少量字符还可以,对长字符串,时间就变得更长了。所以我们再讲一个API:lstrlen。 Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long 以上是lstrlen的声明。lstrlen的作用只有一个:得到字符串的字节数。所以执行 lstrlen("字符abc") 将返回7。我们不需要知道它内部是如何工作的,但它总是返回该字符串是ANSI时的长度,并且速度很快。
谢谢!