没有合适的资源?快使用搜索试试~ 我知道了~
(word完整版)vb编程常用命令集锦.doc
需积分: 5 0 下载量 78 浏览量
2022-10-24
02:04:23
上传
评论
收藏 57KB DOC 举报
温馨提示
试读
12页
(word完整版)vb编程常用命令集锦.doc
资源详情
资源评论
资源推荐
(word 完整版)vb 编程常用命令集锦
vb 编程常用命令集锦
API 函数声明 数据类型与”类型安全”
常 数 结 构
小 结 一些 API 函数集: 控件与消息函数、硬件与系统函数、菜单函数、绘图函数
什么是 API
首先,有必要向大家讲一讲,什么是 API。所谓 API 本来是为 C 和 C++程序员写的.API 说来说去,就是一种
函数,他们包含在一个附加名为 DLL 的动态连接库文件中.用标准的定义来讲,API 就是 Windows 的 32 位应
用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的
运行在 Windows95 和 Windows NT 操作系统上的应用程序.可以说,如果你曾经学过 VC,那么 API 对你来说不
是什么问题。但是如果你没有学过 VC,或者你对 Windows95 的结构体系不熟悉,那么可以说,学习 API 将是
一件很辛苦的事情。
如果你打开 WINDOWS 的 SYSTEM 文件夹,你可以发现其中有很多附加名为 DLL 的文件。一个 DLL 中包含的 API
函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的∶不可能掌握.但实际上,我
们真的没必要都掌握,只要重点掌握 Windos 系统本身自带的 API 函数就可以了.但,在其中还应当抛开掉同
VB 本身自有的函数重复的函数。如,VB
的 etAttr 命令可以获得文件属性,SetAttr 可以设置文件属性。对 API 来讲也有对应的函数
GetFileAttributes 和 SetFileAttributes,性能都差不多。如此地一算,剩下来的也就 5、600 个.是的,
也不少。但,我可以敢跟你说,只要你熟悉地掌握 100 个,那么你的编程水平比现在高出至少要两倍。尽管人
们说 VB 和 WINDOWS 具有密切的关系,但我认为,API 更接近
WINDOWS。如果你学会了 API,首要的收获便是对 WINDOWS 体系结构的认识。这个收获是来自不易的。
如果你不依靠 API 会怎么样?我可以跟你说,绝大多是高级编程书本(当然这不是书的名程叫高级而高级的,
而是在一开始的《本书内容》中指明《本书的阅读对象是具有一定 VB 基础的读者》的那些书),首先提的问
题一般大都是从 API 开始。因此可以说,你不学 API,你大概将停留在初级水平,无法往上攀登。唯一的途
径也许就是向别人求救∶我快死了,快来救救我呀,这个怎么办,那个怎么办?烦不烦呢?当然,现在网上
好人太多(包括我在内,嘻嘻),但,你应当明白,通过此途径,你的手中出不了好的作品。这是因为缺乏这些
知识你的脑子里根本行不成一种总体的设计构思。
API 文本游览器
很多 API 函数都是很长很长的。想看什么样子吗?如下就是作为例子的 API DdeClientTransaction 函数∶
Declare Function DdeClientTransaction Lib ”user32" (pData As Byte, ByVal cbData As Long, ByVal
hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout
As Long, pdwResult As Long) As Long
哇!这么长?如果你从来没有接触过 API,我想你肯定被吓住了。你也许考虑,该不该继续学下去。不过不要
担心,幸运的是 Microsoft 的设计家们为我们提供了有用的工具,这便是 API
文本查看器.
通过 API 文本查看器,我们可以方便地查找程序所需要的函数声明、结构类型和常数,然后将它复制到剪贴
板,最后再粘贴到 VB 程序的代码段中。在大多数情况下,只要我们确定了程序所需要的函数、结构和常数
这三个方面后,就可以通过对 API 文本游览器的以上操作将他们加入到程序段中,从而程序中可以使用这些
函数了。这些是学习 API 最基本的常识问题,它远远占不到 API 的庞大的体系内容。今后我们把精力浪费(这
绝不是浪费)在哪里呢?那就是∶
什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数。
API 函数声明
让我们回想一下。在 VB 中,如何声明函数呢?我想,如果你正在看此文,那么你绝对能够回答得出这个问题。
以下便是你应该很熟悉的函数声明∶
(word 完整版)vb 编程常用命令集锦
Function SetFocus (ByVal hwnd As Long) As Long
即,这行代码定义了名为 SetFocus 的函数,此函数具有一个 Long 型数据类型的参数,并按值传递(ByVal),
函数执行后将返回一个 Long 型数据。
API 函数的声明也很类似,如,API 中的 SetFocus 函数是这样写的∶
Declare Function SetFocus Lib "user32" Alias "SetFocus” (ByVal hwnd As Long) As Long
有点复杂了一些.是的,是复杂了点.但我可以告诉你,除了这些多出来的部分,其他部分还是和你以前学到
的东西是一样的。函数在程序中的调用也是一样.如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一点是清楚的。它不象你自己写的程序那样能够看到里面的运行机理,也不像 VB
自带的函数那样,能够从 VB 的联机帮助中查到其用法。唯一的方法就是去学、查 VB 以外的资料。
Declare 语句用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。对此,你只要记住任何 API
函数声明都必须写这个语句就可以了。
Iib 指明包含所声明过程或函数的动态链接库或代码资源.也就是说,它说明的是,函数或过程从何而来的问
题。
如在上例中,SetFocus Lib ”user32”说明 函数 SetFocus 来自 user32。dll 文件。主要的 dll 动态连接
库文件有∶
user32。dll Windows 管理。生成和管理应用程序的用户接口。
GDI32。dll 图形设备接口。产生 Windows 设备的图形输出
Kernel32。dll 系统服务.访问操作系统的计算机资源。
注意,当 DLL 文件不在 Windows 或 System 文件夹中的时候,必须在函数中说明其出处(
路径)。如,SetFocus Lib "c:\Mydll\user32"
函数声明中的 Alias 是可选的。表示将被调用的过程在动态链接库 (DLL) 中还有另外的名称(别名)。
如,Alias "SetFocus" ,说明 SetFocus 函数在 User32。dll 中的另外一个名称是,
SetFocus.怎么两个名都一样呢?当然,也可以是不同的。在很多情况下,Alias 说明的函数名,即别名最后一
个字符经常是字符 A,如 SetWindowsText 函数的另一个名称是
SetWindowsTextA,表示为 Alias ”SetWindowsTextA”。这个 A 只不过是设计家们的习惯的命名约定,表示
函数属于 ANSI 版本。
那么,别名究竟有什么用途呢?从理论上讲,别名提供了用另一个名子调用 API 的函数方法.如果你指明了
别名,那么 尽管我们按 Declare 语句后面的函数来调用该函数,但在函数的实际调用上是以别名作为首要
选择的。如,以下两个函数(Function,ABCD)声明都是有效的,他们调用的是同一个 SetFocus 函数∶
Declare Function SetFocus Lib "user32” "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32” Alias ”SetFocus” (ByVal hwnd As Long) As Long
需要注意的是,选用 Alias 的时候,应注意别名的大小写;如果不选用 Alias 时的时候,函数名必须注意大
小写,而且不能改动。当然,在很多情况下,由于函数声明是直接从 API
文本游览器中拷贝过来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。
最后提醒你一句,API 声明(包括结构、常数)必须放在窗体或模块的"通用(General Declarations)段。
数据类型与"类型安全”
API 函数中使用的数据类型基本上和 VB 中的一样.但作为 WIN32 的 API 函数中,不存在 Integer
数据类型.另外一点是在 API 函数中看不到 Boolean 数据类型。 Variant 数据类型在 API 函数中是以 Any 的
形式出现,如 Data As Any。尽管其含义是允许任意参数类型作为一个该 API 函数的参数传递,但这样做存
在一定的缺点.其原因是,这将会使得对目标参数的所有类型检查都会被关闭。这自然会给各种类型的参数
调用带来了产生错误的机会。
(word 完整版)vb 编程常用命令集锦
为了强制执行严格的类型检查,并避免上面提到的问题,一个办法是在函数里使用上面提到到 Alias 技术.如
对 API 函数 GetDIBits 可进行另外一种声明方法。如下∶
GetDIBits 函数的原型∶
Public Declare Function GetDIBits Lib ”gdi32" Alias "GetDIBits” (ByVal aHDC As Long, ByVal
hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As
BITMAPINFO, ByVal wUsage As Long) As Long
GetDIBits 函数的改型∶
Public Declare Function GetDIBitsLong Lib ”gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal
hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As
BITMAPINFO, ByVal wUsage As Long) As Long
通过本课程前面所学到的知识,我们已经可以得知原型 GetDIBits 函数也好,改型 GetDIBitsLong 函数也
好,实际将调用的都是 Alias 所指定的 GetDIBits 原函数。但你应当看到,两者的区别在于,我们在改型的
函数中强制指定 lpBits 参数为 Long 形。这样就会使得函数调用中发生的错误机率减少到了最小.这种方法
叫做”安全类型”声明.
API 函数中经常看到的数据类型有∶Long,String,Byte,Any。.。。(也就这些吧。)
常 数
对于 API 常数来讲,没有什么太特别的学问。请看 VB 中的以下代码∶
Msg = MsgBox(”您好", vbOKCancel)
我们知道, vbOKCancel 这个常数的值等于 1。对上面的代码我们完全可以这样写,而不会影响代码的功能∶
Msg = MsgBox("您好", 1)
但你大概不太愿意选择后一种,因为这会使得看懂代码费劲起来。这种方法也被 API 采取了。只是 API 常数
必须在事情之前做好初始化声明 VB 本身是看不懂的。其内容仍然来自与 API
文本游览器.具体形式如下等等∶
Public Const ABM_ACTIVATE = &H6
Public Const RIGHT_CTRL_PRESSED = &H4
Public Const RPC_E_SERVER_DIED = &H80010007
Private Const RPC_S_CALL_FAILED_DNE = 1727&
在常数的初始化中,有些程序使用 Global,如 Global Const ABM_ACTIVATE = &H6,但我认为 Public 完全
可以代替它。过去我也用过 Global,但现在不大用了.一会儿用这个,一会儿用那个,各程序之间不能保持一
致性了,起码看起来别扭。
结 构
结构是 C 和 C++语言中的说法。在 VB 中一般称为自定义数据类型。想必很多朋友都已经认识它。在 API 领域
里,我更喜欢把它叫做结构,因为 API 各种结构类型根本不是我定义(
自定义)的.
在 VB 中,API 结构同样由 TYPE。。..。.。END TYPE 语句来定义。如,在 API 中,点(Point)结构的定义方法
如下:
Public Type POINTAPI
X As Long ’点在 X 坐标(横坐标)上的坐标值
Y As Long ’点在 Y 坐标(纵坐标)上的坐标值
End Type
又如,API 中矩形(Rect)结构的定义如下∶
Public Type RECT
剩余11页未读,继续阅读
智慧安全方案
- 粉丝: 3650
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0