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毫秒