打印本文 打印本文  关闭窗口 关闭窗口  
VB调用API函数使窗口保持在最上层
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:44:27  文章录入:杜斌  责任编辑:杜斌

  我们看到有的应用程序不管窗口是否活动都使窗口保持在最上层,常见的Microsoft Word的文件打开和编辑查找窗口就是这样。在VB开发中可以通过调用SetWindowsPos()API函数实现这个功能。该函数声明如下:

   Private Declare Function SetWindowPos
   Lib "user32" (ByVal hwnd As Long, _
   ByVal hWndInsertAfter As Long, ByVal
   x As Long, ByVal y As Long, _
   ByVal cx As Long, ByVal cy As Long,
   ByVal wFlags As Long) As Long

   hWnd变元是窗口的句柄;x,y是窗口的左上角的坐标;cx、cy是窗口宽度和高度;hWndInsertAfter变元是窗口清单中hWnd窗口前面的窗口句柄,有四个可选值:

   序号 可 选 值 作 用
   1 HWND_BOTTOM 把窗口放在窗口清单的底部
   2 HWND_TOP 把窗口放在窗口清单的字符顺序的顶部
   3 HWND_TOPMOST 把窗口放在窗口清单的顶部
   4 HWND_NOTOPMOST 把窗口放在窗口清单的顶部,最上层窗口之下

  WFlags变元为整型值,有八个可选值:

   序号 可 选 值 作 用
   1 SWP_DRAWFRAME 在窗口周围画一个方框
   2 SWP_HIDEWINDOW 隐藏窗口
   3 SWP_NOACTIVATE 不激活窗口
   4 SWP_NOMOVE 保持窗口当前位置
   5 SWP_NOREDRAW 窗口不自动重画
   6 SWP_NOSIZE 保持窗口当前尺寸
   7 SWP_NOZORDER 保持窗口在窗口清单中的当前位置
   8 SWP_SHOWWINDOW 显示窗口

  下面的例子程序Test演示了对函数中的以上7个变元作正确的选择后,应用程序运行后窗口总可保持在最上层,程序清单如下:

Option Explicit
   Private Declare Function SetWindowPos
   Lib "user32" (ByVal hwnd As Long, _
   ByVal hWndInsertAfter As Long,
   ByVal x As Long, ByVal y As Long, _
   ByVal cx As Long, ByVal cy As Long,
   ByVal wFlags As Long) As Long
   Private Const HWND_TOPMOST = -1
   Private Const SWP_SHOWWINDOWS = &H40

Private Sub Form_Load()
   Dim retValue As Long
   retValue = SetWindowPos(Me.hwnd,
   HWND_TOPMOST, Me.CurrentX, _
   Me.CurrentY, 300, 300, SWP_SHOWWINDOWS)
   End Sub

  备注:编写函数声明时,整个函数声明须在一行中写完,不可提行。一般是自动从系统中得到函数声明,方法是从VB的外接程序管理中启动“API 浏览”程序,在“API 浏览”程序中找到所需的函数声明,然后复制到VB代码中。

打印本文 打印本文  关闭窗口 关闭窗口