感悟VB细水长流话API

上传人:飞*** 文档编号:5505572 上传时间:2017-09-06 格式:DOC 页数:8 大小:39KB
返回 下载 相关 举报
感悟VB细水长流话API_第1页
第1页 / 共8页
感悟VB细水长流话API_第2页
第2页 / 共8页
感悟VB细水长流话API_第3页
第3页 / 共8页
感悟VB细水长流话API_第4页
第4页 / 共8页
感悟VB细水长流话API_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《感悟VB细水长流话API》由会员分享,可在线阅读,更多相关《感悟VB细水长流话API(8页珍藏版)》请在金锄头文库上搜索。

1、感悟 VB细水长流话 API(一)来源:电脑爱好者 作者: 出处:巧巧读书 2005-11-06 进入讨论组关 键 词: visual basicwindows2000windows操作系统 windows 下一页 1 2 3 4 5 编写 VB程序时,经常遇到的问题就是 VB给我们准备的东西我们会用,控件组装就是一个程序,然而一旦想要实现 VB没有直接提供的功能,就会不知所措。其实 Windows操作系统本身就给我们准备了许多东西,VB 没有的,或许 Windows有。我们当然希望少花力气,多得效果。这里要讲的内容就是学会利用 Windows给我们的东西:API。然而,学会一种东西是需要付

2、出相当的努力的,API 也一样,它可以给我们带来很大的方便,但想要掌握它,就不是使用几个控件那么轻松的事了。所以在看这篇文章时,希望读者可以抱一个正确的态度,就是学习编程不是为好玩,而是为使用; 不要以自己对这方面是否有兴趣而看,而要为 API是否能为你的程序带来效果而看。我并不是说一切都是那么严肃和困难,只是 API对 VB来说,已经可以算高级方面的应用了,所以“认真”和“仔细”是需要的。好了,放松一点,让我们从现在起一步步领略 API的好处吧。前言1.APIAPI 全称为 Application Programming Interface,直译的话可叫它“应用程序接口” 。从意义上来说,A

3、PI 是一个操作系统或某个程序本身提供给其他程序使用的函数。在Windows操作系统中,有成千个 Windows的函数提供给应用程序使用,本文所说的 API,就是指这些函数。2.VB 与 API之所以写这篇文章(而不写 VC或其他语言) ,是因为 VB对 API的支持不是直接的,而且是不完全的; 在使用上,Windows 的 API编写时是假设调用者是 C或 C+语言,因此 VB调用 API不是很方便,也经常有不必要的错误或不明白如何使用的情况出现。本文的对象主要还是对 API没有很深研究的读者,如果你不想了解太多细节,你可以把一个合适的函数用法搬过去,或者你完全不知道 API,或者只知道少数

4、,对许多函数还不清楚如何使用,或者你希望可以从本文学到更多使用 API的技巧甚至 VB的技巧(但愿我可以让你学到) ,我想你都应该看这篇文章。但还是有个大前提,你必须是已经会使用 VB的读者,因为以后讲到的内容不会有一个完整工程从头到尾教你做,有可能是一段简短的声明与调用代码,也可能是几个函数的组合,如果必要的话,也会讲述相关内容的 VB技巧,但一定不会有完整的实例示范。3.本文原则和约定由于 API中有的用法简单有的复杂,有的可单独使用有的却不行,加上各个 API的主要用途不同,很难判断先说哪个再说哪个可以让人更容易理解,因此本文尽量从比较常用的说起,从可以对程序产生较大作用的说起。为了能让

5、多数人理解,如果需要涉及到其他方面的知识,也将尽量讲述,让读者可以学到使用 API的知识,并能够利用本文中的知识应付新的API。如果你对某个 API有什么疑问,欢迎来信() ,但由于时间有限,不能对来信一一回复,如果有需要,将会在文中讲述。基础知识在讲 API之前,让我先讲解一些与 API相关的 VB基础知识,后文如有涉及将不再详述。此处未提及的,将在本文中第一次接触时再做解释。1.自定义类型VB 中可以使用 Type关键字将已有的数据类型进行组合,成为一个新的类型,该类型就称为用户自定义类型。如:Type NewTypesName As StringlNumber As LongEnd Ty

6、pe定义了一个名为 NewType的自定义类型。以后可以用 Dim MyType As NewType来定义一个 NewType类型的变量。sName As String类型的变量有两种,一种是变长,即运行时的字符串长度是可变的,另一种是定长,运行时字符串的长度是固定的。平常我们定义一个字符串变量: Dim strA As String 即定义了一个变长的字符串,但在使用 API时经常要用到定长的字符串,应该这样定义: Dim strB As String * 30,即定义了一个可容纳 30个字节字符的变量。2.声明VB 中使用 API之前,需要先对 API进行声明,声明的方法是使用 Decl

7、are关键字,如:Public Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long声明了一个名为 SendMessage的 API函数。许多 API的声明可以在 API浏览器中找到,而且本文在讲述一个 API时也会给出声明,更深入的知识将在以后讲述。3.句柄API 中使用得最多的一个词大概就是“句柄”了。如果要说得复杂些,句柄的确可以说上一大堆,不过作为 VB

8、的应用,我们可以更简单地去理解它。可以这么说,句柄是Windows系统赋予内存中每一个对象,包括窗口、按钮(其实也是一种窗口)或者文件、图标、菜单等等所有东西的标识。所谓标识就如身份证一样,是不会重复并且和实际对象是一一对应的。它的作用是让 Windows知道将被操作的对象是谁。许多 VB控件都提供了一个长型的 hWnd属性,一般情况下,这个属性就是这个控件的句柄,用 API控制这个控件时就需要用到这个属性了。4.设备上下文其实我觉得“设备上下文”这个词读起来很奇怪,不过就其字面来看,Device Context(DC,可不是直流电或 DreamCast哦)就是这个意思,许多人也这么称它。不过

9、我想翻译为“设备中介”大家应该更容易理解吧。它的作用是作为计算机设备和程序之间的中介,比如显示器和程序之间,或者打印机和程序之间。在对这些设备操作的时候,是需要通过这个中介操作的(与句柄相似) ,一些控件,如 Picture,想在上面画图时,就要用到hDC属性了。5.显式声明与自动保存在默认情况下,Visual Basic会把未声明的变量认为是新变量(即使是你不小心打错字了) ,这样很容易出现错误,而且要找出这样的错误往往很不容易。加上 API的操作基本上都会涉及到系统本身,一旦出错就有可能出现 Visual Basic崩溃甚至系统崩溃。所以到Visual Basic的选项设置中选上 Requ

10、ire Variable Declaration(需要变量声明) 。在 Enviroment(环境)页中的 When a program starts(当程序启动时)处选上 Prompt To Save Changes(提示保存)或 Save Changes(自动保存) 。这样 Visual Basic会检查变量是否已经声明,不再允许没有声明的变量出现了。6.API 浏览器前面讲“声明”的时候提到了 API浏览器,这里也说一说它。在安装完 VB时,安装程序会把 API浏览器复制到你的计算机里。启动后界面如图 1(以 VB6为准) 。可以看到,从API浏览器里我们可以得到 API的声明、常量值以

11、及与 API相关的自定义类型的定义。其中Declare Scope(声明范围)是指该声明是公有的还是私有的。对于在标准模块中的声明,如果声明为私有,则只对该模块有效,如果为公有,则对整个程序都有效。在窗体模块中只能声明为私有。7.MSDNMSDN 是微软发布的一套完整的 Windows开发者技术文档(如图 2) 。里面不仅有VB、VC、VFP、MSDEV、VSS 等开发工具的完整帮助,而且包含了 Windows平台开发的几乎所有的技术资料,并不断地更新。我们需要的 API资料这里都有很详细的说明,包括使用平台、参数类型、参数作用等(当然它并非完全正确,错误的地方也时有出现) 。不过作为以 C为

12、基础的 API,这里的资料是英文的,而且格式也是 C语言格式。想要读懂,那你的英文水平和 C语言就要有两把刷子了。不过不必担心,它只是我建议一定要有的参考文档,最重要的还是我接下来要讲的内容,它不仅是中文的,还是 VB的,又有使用示例,还有相关知识讲解。记住 MSDN只是参考文档,作用就好像字典,可千万不要买了一套 MSDN就跑去跟别人说你已经变得多厉害了,不然顺便说一说,以前的 MSDN是双 CD的,现在已经变成 3CD了。如果买的话应尽量买最新的(但没有必要每次更新都换一套) ,因为更新的版本把一些错误改正了,并增加了新的内容,比如最新的 MSDN已经增加了许多 Windows XP的内容

13、。你可以从微软的中国网站订到这套文档,不过一年的价钱从一万几到三万几,买不起的话自己想办法吧。好了,开篇写了这么多,无非也是想让读者在以后可以更容易理解所讲的内容。这些是基础,是一定要记住的。下面我们就先介绍一个比较简单的 API,开始我们的 API之旅吧!第一话 从消息说起由于这是细水长流话 API的第一话,我必须注意到所讲的内容要简单,并且让你有耐心可以看到往后的文章,所以我希望可以通过一个比较特别的例子来引起你的注意(这样的情况不会总是有的) 。让我们想想,VB 里的 CommandButton控件让我们可以做什么?按下、弹起,还有呢?请看看图 3,这样的情况在你的程序运行时出现过吗?W

14、indows 是以消息来传递信息的。当出现某个操作,比如按钮被按下,就产生按钮被按下的消息。消息被传送到被操作对象(按钮) ,事件就产生了。应注意不是按钮产生消息,而是 Windows知道这个操作的发生,向按钮发送这个消息,按钮收到后再做相应的处理如改变外观成为按下的状态。Windows 允许第三者向某个对象发送消息,因此当某个操作没有发生时,我们是可以让对象如同收到消息一样产生效果的,这就需要用到 API函数SendMessage 了。SendMessage 的声明前面已经说过(注意以 Public开头应放在标准模块中,否则用Private开头) ,它的各个参数中,hwnd 是对象的句柄,w

15、Msg 是消息的值(具体什么消息) ,另外两个参数根据不同消息和不同应用有不同的值。 你看到的图 3的情况,是由于我的程序向 Command Button控件发送了WM_NCLBUTTONDOWN消息。这个消息发生在鼠标在窗口的非客户区域上按下时。所谓非客户区域,你可以理解成一个窗口的边缘和标题栏(当然是指一般情况,这种情况是可以被程序改变的) 。在我这个按钮的 MouseDown事件中,只写了短短的几句:Private Sub cmdResize_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)D

16、im nParam As LongWith cmdResize之所以在 0和 100之间以及下面 .Width-100 和 .Width 之间,是让鼠标只在按钮边缘才可以拉动按钮If X 0 And X .Width - 100 And X 0 And X .Width - 100 And X .MousePointer Then.MousePointer = NewPointerEnd IfEnd WithEnd Sub作用很明显,而且很简单,所以我就不对这段代码作解释了。这个例子很简单,但相信起的作用是不小的。SendMessage 可以发送很多消息,当然我不会对这些消息一一作解释,但以后还是会经常接触到的,所以更多的知识就等慢慢再学吧。文中程序在 Windows2000+VB6环境下调试通过。感悟 VB细水长流话 API(六-2)感悟 VB细水长流话 API(六-1)第九话 寻找子窗口 这里又是一个特别的例子,图像处理我还会两下

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号