什么是“总在上面”呢?就是这个窗口总是停留在其他窗口的上面。那么,这个TopMost窗口怎样设计呢?请看下面的“招儿”:
这个“总在上面”的窗口的实现需要用到一个API函数——SetWindowPos。这个函数的格式如下:
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——所处理窗口的句柄。
hWndInsertAfter——窗口的句柄,它将在Z轴顺序上先于该窗口。这个变量可以赋以下值中的一种,从而成为窗口的句柄:HWND—BOTTOM(=1,将窗口放置在Z轴顺序的底端)、HWND——TOP(=0,将窗口放置在Z轴顺序的顶端)、HWND—TOPMOST(=-1,将窗口放置在所有非首页窗口的上面)或者HWND—NOTOPMOST(=2,对在所有非首页窗口的顶端窗口重新定位)。
x——规定窗口左边的新位置。
y——规定窗口上边的新位置。
cx——规定窗口的新宽度。
cy——规定窗口的新高度。
wFlags——规定大小和定位选择,如表所示。
接下来我们该看一个例子。
先设置一个200×200像素的窗口,然后声名API函数SetWindowPos:
Declare Function SetWindowPos Lib ″user32″ Alias ″SetWindowPos″ (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
并定义各个常量的值,如下:
const SWP—SHOWWINDOW=&H40
const SWP—DRAWFRAME=&H20
const HWND—TOPMOST=-1
然后,在Form—Load子程序中填写如下代码就可以使其成为首页了:
Sub Form—Load()
retval=SetWindowPos(Form1.hwnd, HWND—TOPMOST, 100, 100, 100, 100, SWP—DRAWFRAME
Or SWP—SHOWWINDOW)
End Sub
到此为止,我们已经完成了这个TopMost的所有工作,它现在已经可以保持在其他窗口之上了。试试看?