繁体中文
设为首页
加入收藏
当前位置:程序开发首页 >> Visual Basic >> 如何提高调用Window API函数编程技巧

如何提高调用Window API函数编程技巧

2008-02-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:做为一个不断进取的编程者,我们常常不满足于编程语言所提供的一般功能,总是希望能够实现一些特殊的功能,这有时不但是我们程序的要求,有时也是编程者心理上需要(试想,还会有什么比在深夜中巧妙解决一个难题而更令...

做为一个不断进取的编程者,我们常常不满足于编程语言所提供的一般功能,总是希望能够实现一些特殊的功能,这有时不但是我们程序的要求,有时也是编程者心理上需要(试想,还会有什么比在深夜中巧妙解决一个难题而更令人兴奋呢?)。VisualBasic,做为一个当前最流行的快速编程环境,就给我们提供了实现这些目标的平台,事实上,它无限扩展的API接口可以实现所有WINDOWS下可以实现的功能。然而对于初学者来说,"浩瀚"的API函数总是显得那么神奇与不可琢磨,因此在实际应用过程中不能够灵活应用。下面我将结合两个小例子来示范介绍VB中调用API函数的步骤和功能,并总结说明在实际工作中如何提高这方面的技巧。例子在WINDOWS98下采用VB6.0编译。

一.限制鼠标的移动

---- 有时我们的软件要求用户在未完成某一任务时,鼠标不能移出当前活动控件,换句话就是将鼠标限制在控件的内部,直到任务完成或用户中断为止。这个功能借助API函数实现起来思路很清楚,代码也很简洁。其思路是先确定当前鼠标的位置;然后确定当前活动控件的大小;最后将鼠标限制在活动控件内。(下面忽略项目建立等过程)

---- 1.建立一个新项目:新窗体为form1,在form1上添加一个commandbutton,设置其Name=CMButton1;Caption="将鼠标限制在此按钮中"

---- 2.拷贝API函数和POINTAPI结构:打开VB6.0自带的API浏览器,调入WIN32API.txt文件,复制以下结构和函数声明到form1的声明部分:

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Private Type POINTAPI

x As Long

y As Long

End Type

Private Declare Function ClientToScreen Lib

"user32" Alias "ClientToScreen" (ByVal

hwnd As Long, lpPoint As POINTAPI) As Long

´用来确定当前鼠标的位置

Private Declare Function ClipCursor Lib

"user32" Alias "ClipCursor" (lpRect As Any)

As Long ´用来限定当前鼠标的活动范围

---- 3.定义一个通用过程ConfineTo

Public Sub ConfineTo (myCtl As Object)

On Error Resume Next

Dim tmpRect As RECT

Dim pt As POINTAPI

With myCtl

If TypeOf myCtl Is Screen Then ´锁定在屏幕范围内

tmpRect.Left = 0

tmpRect.Top = 0

tmpRect.Right = (.Width \ Screen.TwipsPerPixelX)

tmpRect.Bottom = (.Height \ Screen.TwipsPerPixelY)

Elseif TypeOf myCtl Is form ´锁定在窗体范围内

tmpRect.Left = (.Left \ Screen.TwipsPerPixelX)

tmpRect.Top = (.Top \ Screen.TwipsPerPixelY)

tmpRect.Right = (.Left + .Width) \ Screen.TwipsPerPixelX

tmpRect.Bottom = (.Top + .Height) \ Screen.TwipsPerPixelY

else

pt.X = 0

pt.Y = 0

Call ClientToScreen(.hWnd, pt)

´获取当前控件在屏幕上的位置

tmpRect.Left = pt.X

´保存当前控件位置

tmpRect.Top = pt.Y

pt.X = .Width

pt.Y = .Height

Call ClientToScreen(.hWnd, pt)

tmpRect.Bottom = pt.Y

tmpRect.Right = pt.X

End If

Call ClipCursor(tmpRect)

End With

End Sub

---- 4.在 CMButton1_Click()中加入以下代码

Static Cliped As Boolean

´静态变量用来控制状态切换

If Not Cliped Then

ConfineTo Cmbutton1

Cliped = True

Else

ConfineTo Screen ´取消鼠标限制

Cliped = True

End If

---- 5. 运行后,鼠标点击cmbutton1,此时鼠标只能被锁定在此按钮内部,再次点击按钮,限制取消。

二.创建临时文件

---- 临时文件用来保存软件运行过程中的临时变化,这对于熟悉WORD等软件的人来说,经常会遇到。那么临时文件是如何产生的呢,其实很简单,只需要一个API函数就可以。

---- 1.拷贝声明函数(方法同前)

Private Declare Function GetTempFileName Lib "kernel32" _

Alias "GetTempFileNameA" (ByVal lpszPath As String, _

ByVal lpPrefixString As String, ByVal wUnique As Long, _

ByVal lpTempFileName As String) As Long

参数定义如下:

lpszPath =传入保存临时文件的路径 ,如"C:\mytemp"

lpPrefixString=传入临时文件名开始的前三个字母,

起到帮助识别临时文件来源的作用。

wUnique =0 ,windows随机产生文件名;否则安其值定义文件名。

lpTempFileName=返回随机文件名

---- 2.返回临时文件名

Private Function GenTempName(sPath As String)

Dim sPrefix As String

Dim lUnique As Long

Dim sTempFileName As String

If IsEmpty(sPath) Then sPath = "c:\temp"

sPrefix = "TVB"

lUnique = 0 ´windows随机给名

sTempFileName = Space$(100)

GetTempFileName sPath, sPrefix, lUnique, sTempFileName

sTempFileName = Mid$(sTempFileName, 1,

下一页 8

相关内容:

- VB中字符串中文的问题

- VB的(空字串)、Null、Empty、与 Nothing 的区别

- 在TextBox中查找和继续查找

- VB在编程中的几个细节应用

- VB数据库编程的几点心得

责任编辑:admin
相关文章