VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: liusai

[原创] VB API初级入门(新手必看。注意:不是广告)

  [复制链接]
发表于 2007-2-26 16:48:44 | 显示全部楼层
顶!支持!希望第二篇来点调用的技巧,比如有些API要求的数据类型比较变态,在VB中要用点技巧才能正常调用,尤其涉及地址、指针、结构体变量(不知是不是这样叫,反正类似Person.Name="xxx"这种东西)之类的。

[ 本帖最后由 VBProFan 于 2007-2-26 16:51 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-26 16:54:44 | 显示全部楼层
貌似这样就成了API技巧篇了,VBProFan ,很遗憾,这个是写给刚入门API的初手的,如果以后有时间我保证写一篇关于API的技巧文章。
回复 支持 反对

使用道具 举报

发表于 2007-2-26 16:56:18 | 显示全部楼层
刚看完一遍,相当地好,容易理解,盼望第二课
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-26 17:38:38 | 显示全部楼层
既然大家都这么赏脸的话,那我就再继续写下去。接上面的:

3,继续往下学吧。。

    上面两个我们讲到了一般API的使用方法,和一些API常量的使用方法,接着我们来看看API类型的使用方法,在了解这一小节前请先搞懂VB中的自定义类型(Type)这章,否则你可能会稀里糊涂的,到时别怪我没提醒你哦!

    这次让我们来获取一下鼠标指针的位置。这里教大家一个技巧,当你想用API去实现某一特定的功能时,却又不知道该用哪个API,这时你可以就表面的意思到API浏览器找找,有70%以上的机率可以找到哦!现在就拿这个API开刀,那我们应该如何找?别着急,往下看:

    如我们现在要获取鼠标指针位置,可以这样翻译一下:Get(获取)Cursor(指针)Pos(位置),组合起来:GetCursorPos,呵呵,一条API就这样出来了,到API浏览器输入这个组合单词,呵,有吧?见以下:

Private Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long

    好了好了,高兴一下就算了,现在让我们分析一下这个API,看其它的没啥不同的,其中只有一个参数,就是最后一个变量有些不懂?在VB中好像没有见过这个变量?不明白么?那就再继续往下看。

    lpPoint As POINTAPI,POINTAPI?很显然,在VB中并没有此类型,一般都是String、Integer、Long、Byte等变量类型,那么这个也就理所当然的是自定义类型(问:什么是自定义类型?答:不知道,自已不会看书啊)。既然是自定义类型,那么我们如何才能知道它是如何定义的呢?这里也就不用你操心啦,还是API浏览器,在最上面的Combox中选择类型,这时下面List中也就自然的把API的相关类型显示出来了,现在我们开始在Text文本框中输入我们需要的自定义类型,POINTAPI,点击添加,出来了吧?如下:

Private Type POINTAPI
        x As Long
        y As Long
End Type

    好了,现在开始写代码,添加一个Timer控件,设置属性见以下:

    Interval = 100
    Enabled  = True

    双击Timer控件,转到代码环境中写入以下代码:

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
        x As Long
        y As Long
End Type
Private Sub Timer1_Timer()
    Dim lpPoint As POINTAPI
   
    GetCursorPos lpPoint
   
    Me.Caption = "X = " & lpPoint.x & " Y = " & lpPoint.y
End Sub

    好了,分析开始,紧张不?别紧张,没啥值得紧张的!见以下:

    Dim lpPoint As POINTAPI,申明一个POINTAPI类型变量,我们学过自定义类型的朋友都知道,一般使用自定义类型时都需要先申明一个相关的类型变量方可使用。

    GetCursorPos lpPoint,这一步我不说你都知道,调用API呗。通过这个API获取鼠标指针的相关信息。这里我们使用了自己声明的lpPoint变量,那为啥要使用这个变量呢?这里我们回过头来就前两节我们所分析的那样进行分析,可以看到GetCursorPos所需要传递的值,如果是Long,我们就传入整形数字,如果是String,我们就传入字符串,这里是POINTAPI,所以理所当然是要传入POINTAPI类型,但是!VB中的自定义类型不可以直接使用,所以我们需要先声明一个相同类型的变量。不知道说了这么多你懂了没?

  
    Me.Caption = "X = " & lpPoint.x & " Y = " & lpPoint.y,最后一句,也就是用来显示当前鼠标的坐标值的,我们通过声明的lpPoint变量来获取相应的鼠标坐标值,如果你不懂,那就请你先把VB自定义类型这章学完再说。

    这里关于API的一些使用方法及范例就先介绍到这里,如果你还有耐心往下看下去的话,那我们就接着往下聊!

四、如何慢慢提升自己的API功力?

    何为API功力?其实没必要搞那么清楚,首先需要搞明白的就是,你应该知道在什么环境下使用什么API,实现哪些功能应该使用哪些API!这才是我们需要的。

    今天先写到这吧,因为还有些事,最近爸妈老催促着,下次接着讲!在此还是要多谢大家的捧场。。。

评分

参与人数 4威望 +4 人气 +1 收起 理由
jzy123456 + 1 + 1 精品文章
Pozzi + 1
cwa9958 + 1 精品文章
baojiapin + 1

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2007-2-27 09:41:45 | 显示全部楼层
多谢菜新,真的很容易理解,关注着你的每一篇文章!!!!!
回复 支持 反对

使用道具 举报

发表于 2007-2-27 20:10:57 | 显示全部楼层
支持,给手工置顶一下……
回复 支持 反对

使用道具 举报

发表于 2007-2-27 20:38:19 | 显示全部楼层
首先多谢楼主的精彩文章,加分支持免不了了,看完第一篇我对常数具体什么作用不太了解,于是我把其中一个常数改为其他,代码如下:
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const GW_HWNDLAST = 1

Private Const SW_HIDE = 0
Private Sub Form_Load()
    Dim lphWnd As Long
    lphWnd = GetWindow(Me.hwnd, GW_HWNDLAST)
    ShowWindow lphWnd, SW_HIDE
End Sub
执行结果:整个桌面的图标全部隐藏,按下显示桌面就可以了,然后随便哪个窗体或控件获得焦点,整个桌面的图标又被隐藏,按照字面意思是:hwndlast,其中HWND先前已经说过,LAST是最后的意思,但是具体传递或者说要得到的是什么结果?望答复,谢谢~:)

[ 本帖最后由 baojiapin 于 2007-2-27 20:49 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2007-2-27 20:50:29 | 显示全部楼层
原帖由 liusai 于 2007-2-26 17:38 发表
...你应该知道在什么环境下使用什么API...


这个我最清楚了...
当某个功能,我用小技巧怎么也实现不了的时候,就说明我必须用API的...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-27 21:45:22 | 显示全部楼层
执行结果:整个桌面的图标全部隐藏,按下显示桌面就可以了,然后随便哪个窗体或控件获得焦点,整个桌面的图标又被隐藏,按照字面意思是:hwndlast,其中HWND先前已经说过,LAST是最后的意思,但是具体传递或者说要得到的是什么结果?望答复,谢谢~


首先有些表面上的意思未必就是你所理解的那种意思,建议可以参考一下MSDN,或到网上下载一个专门查询API的电子书看看:

GW_HWNDLAST 为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口

不知道上面的解释你能不能懂,也就是获取的是你当前窗口的顶级窗口,而桌面其实就是你程序当前窗口的顶级窗口。而我们所运行的窗口其实都是桌面窗口的子窗口。

评分

参与人数 1威望 +1 人气 +1 收起 理由
jzy123456 + 1 + 1 继续加,(*^__^*) 嘻嘻……

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2007-2-27 21:54:06 | 显示全部楼层
理解了,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2021-2-26 12:20

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表