# Re: 如何写出Always On Top

Posted by Honey on August 22, 1998 at 18:00:11:

In Reply to: 如何写出Always On Top posted by 我依然是小呆瓜 on August 22, 1998 at 01:18:40:

: 有时候..一些视窗画面会用到Always on top的功能..请问一下，如何用VB写出能有Always on top的功能，又不会影响其它程式的运作。

: 在此先向大家说声谢谢!!
产生浮动式视窗得使用 API 中的SetWindowPos函式
首先通常是在一般宣告部分这样宣告 若在模组
中宣告得去掉Private

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 代表要放置视窗的hWnd,

' hWndInsertAfter 是常数 若常数可为 _
HWND_BOTTOM : 放在Z-order最底层 _
HWND_TOP : 放在Z-order最顶层 _
HWND_TOPMOST : 放在Z-order最顶层 且高于其他视窗 _
HWND_NOTOPMOST : 放在Z-order最顶层 但低于于其他
最顶层视窗视窗 _
常数所代表的值 请查阅 API检视员

' x 代表新视窗的新 X 轴座标

' y 代表新视窗的新 Y 轴座标

'cx 视窗的新高度

'cy 视窗的新宽度

'wFlags 旗标可为下列常数 _
SWP_DRAWFRAME : 在视窗周围画一框架 _
SWP_HIDEWINDOW : 隐藏视窗 _
SWP_NOACTIVE : 不启动(active)视窗 _
SWP_NOMOVE : 保留目前位置(忽略 x,y 参数) _
SWP_NOREDRAW : 不重画视窗 _
SWP_NOSIZE : 保留目前大小 (忽略 cx,cy 参数)_
SWP_NOZORDER : 保留视窗目前在 -
Z-order的位置 (忽略hWndInsertAfter参数) _
SWP_SHOWWINDOW : 显示视窗 _
常数所代表的值 请查阅 API检视员
'参数可重复使用(用 or 连接) 像_
wFlags=SWP_NOMOVE or SWP_NOSIZE

之后再 Form_Activate()事件中加入以下
程式码就好了

Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const HWND_TOPMOST = -1
Dim wFlags As Integer
Dim result As Integer
Dim x As Integer
x = Screen.ActiveForm.hwnd
wFlags = SWP_NOMOVE Or SWP_NOSIZE
Call SetWindowPos(x, HWND_TOPMOST, _
0, 0, 0, 0, wFlags)

另外~不会影响其它程式的运作 ?
不晓的你是指哪一方面

Follow Ups: