VB 版 (精华区)
发信人: zxfsnow (别怕我伤心), 信区: VB
标 题: VB的API编程精粹-2(前面有转载)
发信站: 哈工大紫丁香 (2000年05月31日12:20:40 星期三), 转信
发信人: esc (书剑飘零), 信区: VB
标 题: VB的API编程精粹-2
发信站: 虎踞龙盘东南站 (Fri Aug 20 15:51:08 1999), 转信
第二节:牛刀小试
现在读者一定很想自己亲自试一下,下面举两个 实际应用的例子让大家体会一下API
的妙用吧!
1.使一个窗体始终保持在屏幕的最上面
我们知道VB本身自带的函数是难以完成此功能 的,我们可以通过调用Windows的API函
数:
SetWindowPos达到我们的要求。操作步骤如下:
(1)启动VB5建立一个新工程,在该工程中添加一 个模块(Moudel),在该模块中
用上述的"API例览器" 添加如下的该API函数的函数声明和常量声明部分:
'API函数声明
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwn
d As
Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByV
al cx As
Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'常量声明
Global Const SWP_HIDEWINDOW = &H80
Global Const SWP_NOACTIVATE = &H10
Global Const SWP_NOCOPYBITS = &H100
Global Const SWP_NOMOVE = &H2
Global Const SWP_NOOWNERZORDER = &H200
Global Const SWP_NOREDRAW = &H8
Global Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Global Const SWP_NOSIZE = &H1
Global Const SWP_NOZORDER = &H4
Global Const SWP_SHOWWINDOW = &H40
Global Const HWND_BOTTOM = 1
Global Const HWND_BROADCAST = &HFFFF&
Global Const HWND_DESKTOP = 0
Global Const HWND_NOTOPMOST = -2
Global Const HWND_TOPMOST = -1
Global Const HWND_TOP = 0
Global Const Flags=SWP_NOMOVE Or SWP_NOSIZE
这里以"SWP_"开头的常量是表示窗体所具有的 风格,这些常量可以通过VB中的"OR"
操作符组合在 一起。而以"HWND_"开头的常量表示窗体在桌面上的 位置。从这些常
量的英文单词的意义上读者应该很容 易理解他们所具有的风格了。所以笔者就不一
一去说 明了。至于为什么要添加这些常量而不是别的这就要 您去查看Windows SDK
关于该函数的帮助文档了。当 然这对于初学者来说有一定的难度,但不要畏惧,只
要您仔细看帮助就会慢慢搞懂的。因为这些API函数 是为C和C++的编程人员编写
的,所以如果您懂一点 C++的话会很容易理解的。
(2)现在只要在您想要此功能的地方调用该函数 就可以了,调用的方法如:
Dim Success as Long
SuccesS=SetwindowPos(me.HWnd. HWND_TOPMOST,0,0,0,0,FLAGS)
若Success返回的值不等于零则表示调用成功。
比如在某个窗体的Load事件中加入上述的两行代 码,就可以达到使该窗体始终位于
屏幕最上面的目的。 细心的读者可能已经发现上面的例子中的模块声 明中声明了好
几个常量,可为什么只用到三个呢?现在您可以试着改变一下API函数"SetWindowPos
"
中 的第二个参数或常量FLAGS中的项,看看您的窗体会 出现什么样的效果?
2.VB5中如何屏蔽掉win95中的CTRL_ALT_DEL, CTRL_ESC, ALT_TAB三组热键通过调
用API函数"SystemParametersInfo"来实现。
首先创建一新工程;在此工程中添加一个窗体和 一个模块;在窗体上拖放两个按钮
分别命名为"cmdDisable","cmdEnable";Copy如下代码入模块中:
Public Declare Function SystemParametersInfo Lib "user32" Ahias
"SystemParametersInfoA" (ByVal uAction As Long,ByVal uParam As Long, lpvPa
ram As
Any,ByVal fuWinIni As Long)AS Long
Public Const SPI_SCREENSAVERRUNNING=97
在窗体的代码编辑区Copy如下代码:
'使三组热键失效
Private Sub cmdDisable_click()
SystemParametersInfo
SPI_SCREENSAVERRUNNING,True,byVal 1&,0
End Sub
Private Sub Form_Unload(Cancel As Integer)
'程序退出前是热键有效
CndEnable_Click
End Sub
若将此功能和屏幕保护程序结合到一起,那您的屏幕 保护程序一定增色许多。
API函数的简单调用例子就是这么容易,相信现在您 对API的调用已不再感到神秘了,
接下来我们就看看一个 比较复杂的应用。
--
既然要注定流浪,风又何必苦苦推难。
既然帆想要靠岸,海又何必处处阻拦。
--
以科计为本,以产业报国!
超越自我,飞跃无限!
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.098毫秒