VB調(diào)用API函數(shù)使窗口保持在最上層

字號(hào):

我們看到有的應(yīng)用程序不管窗口是否活動(dòng)都使窗口保持在最上層,常見(jiàn)的Microsoft Word的文件打開(kāi)和編輯查找窗口就是這樣。在VB開(kāi)發(fā)中可以通過(guò)調(diào)用SetWindowsPos()API函數(shù)實(shí)現(xiàn)這個(gè)功能。該函數(shù)聲明如下:
     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變?cè)谴翱诘木浔?;x,y是窗口的左上角的坐標(biāo);cx、cy是窗口寬度和高度;hWndInsertAfter變?cè)谴翱谇鍐沃衕Wnd窗口前面的窗口句柄,有四個(gè)可選值:
     序號(hào) 可 選 值 作 用
     1 HWND_BOTTOM 把窗口放在窗口清單的底部
     2 HWND_ 把窗口放在窗口清單的字符順序的頂部
     3 HWND_MOST 把窗口放在窗口清單的頂部
     4 HWND_NOMOST 把窗口放在窗口清單的頂部,最上層窗口之下
    WFlags變?cè)獮檎椭?,有八個(gè)可選值:
     序號(hào) 可 選 值 作 用
     1 SWP_DRAWFRAME 在窗口周?chē)?huà)一個(gè)方框
     2 SWP_HIDEWINDOW 隱藏窗口
     3 SWP_NOACTIVATE 不激活窗口
     4 SWP_NOMOVE 保持窗口當(dāng)前位置
     5 SWP_NOREDRAW 窗口不自動(dòng)重畫(huà)
     6 SWP_NOSIZE 保持窗口當(dāng)前尺寸
     7 SWP_NOZORDER 保持窗口在窗口清單中的當(dāng)前位置
     8 SWP_SHOWWINDOW 顯示窗口
    下面的例子程序Test演示了對(duì)函數(shù)中的以上7個(gè)變?cè)髡_的選擇后,應(yīng)用程序運(yùn)行后窗口總可保持在最上層,程序清單如下:
    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_MOST = -1
     Private Const SWP_SHOWWINDOWS = &H40
    Private Sub Form_Load()
     Dim retValue As Long
     retValue = SetWindowPos(Me.hwnd,
     HWND_MOST, Me.CurrentX, _
     Me.CurrentY, 300, 300, SWP_SHOWWINDOWS)
     End Sub
    備注:編寫(xiě)函數(shù)聲明時(shí),整個(gè)函數(shù)聲明須在一行中寫(xiě)完,不可提行。一般是自動(dòng)從系統(tǒng)中得到函數(shù)聲明,方法是從VB的外接程序管理中啟動(dòng)“API 瀏覽”程序,在“API 瀏覽”程序中找到所需的函數(shù)聲明,然后復(fù)制到VB代碼中。