我們看到有的應(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代碼中。
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代碼中。