第三课:API的参数传递这是API最重要也是最后一步了,我们要传入我们的参数API才知道要具体做什么。 VB 的程式设计模式是以物件为核心, 但 Windows 的程式设计模式却是以 Handle 为核心 ,因此在这里先简单说明什么是Handle。
Handle 就字义来说是[把手]的意思。以门为例,我们只有打开门才知道屋子里面有什么,而Handle就是门把,为了更好说明Handle,以下以一个例子为例:
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
CloseWindow Form1.hWnd
End Sub
单击Command1时你会发现窗体被最小化了,由于API在最小化一个窗体时要知道是哪个窗体要被最小化,这时要传入对象的一个Handle了,而这个Handle就如同上例中一样要用[对象.hwnd]来获得。Handle是管理员Window分给他们的唯一识别码,这样Window才认识他们,Handle是Long类型。更好的说法就是Handle对于程序中的对象就像***对于我们一样,都是唯一的。
传入的参数很多是Long型,这些Long型我们一般都是在程序中函数返回的,不是随便传入一个数字就行,如果这样的话,可能会让你的程序无法正常运行。如API的返回是Long,因此有时候我们可以把API得到的值再传入到另一个API中。
但如果要传入的参数自定类型的参数的话就要更麻烦一点了,首先应该在一个标准模块中先定义这个记录变量。看如下API的声明:
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
这个获得鼠标位置API要一个POINTAPI型的参数来接收鼠标的位置,POINAPIT类型的如何定义的呢?我们还要用到API文本浏览器,载入WIN32API,在[API类型]下面的下拉框中选择"类型",在下面的搜索框内输入[POINTAPI],双击得到声明,将他们复制到[标准模块]中。然后在代码框中输入(按F5后在窗体上移动鼠标就会在窗体上输出当前鼠标的位置):
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim p As POINTAPI
GetCursorPos p
Cls
Print p.x
Print p.y
End Sub
如果传入的参数是字符串的话,那么API的声明要有Alias,这也要注意。
另外,我们可以从参数的名称来知道要传入什么参数才是合法的,如参数名hwnd时,就是传入对象的Handel,一般用对象名.hWnd获得。
为了更好说明API的使用方法,下面的两课将以一个实用的实例来说明API的用法。