在某些情况下我们需要某个窗体总是在所有窗体的最前端,我们可以使用Form1show
1来实现,但是这样会出现一个问题,就是使整个程序暂停运行,直到Unload
Form1后程序才会继续运行
那么如何使我的窗口总在最前?而不影响到我的整体程序运行呢
使用api函数
SetWindowPos
可以很容易的作到。
SetWindowPos
就是完成设置窗口位置和状态(pos=position)的功能。源代码如下:
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_NOSIZE&
=
&H1
'
保持窗口大小
Private
Const
SWP_NOMOVE&
=
&H2
'
保持窗口位置
Private
Sub
Form_Load()
SetWindowPos
Mehwnd,
HWND_TOPMOST,
0,
0,
0,
0,
SWP_NOMOVE
Or
SWP_NOSIZE
'
将窗口设为在所有窗口前端
End
Sub
1、当win+d后最小化后,再win+d显示窗口,窗口时全屏的,但其放在了任务栏后面;
2、当鼠标点击窗口后使全屏窗口获得焦点在最前面,然后再win+d最小化,再win+d显示,此时全屏是最前面的;
3、但恢复到正常窗口大小时,一直在所有窗口的前面,以后都在其他窗口的最前面,始终都在其他窗口的前面,直到窗口释放;
private 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_NOMOVE = &H2
Const SWP_NOSIZE = &H1
private sub form_load()
'topmost=-1 top=0
setWindowPos hwnd,-1,0,0,0,0,SWP_NOSIZE +SWP_NOMOVE
end sub
hwnd ----------- Long,欲定位的窗口
hWndInsertAfter - Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:
HWND_BOTTOM
将窗口置于窗口列表底部
HWND_TOP
将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
HWND_TOPMOST
将窗口置于列表顶部,并位于任何最顶部窗口的前面
HWND_NOTOPMOST
将窗口置于列表顶部,并位于任何最顶部窗口的后面
x -------------- Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示
y -------------- Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示
cx ------------- Long,指定新的窗口宽度
cy ------------- Long,指定新的窗口高度
wFlags --------- Long,包含了旗标的一个整数
SWP_DRAWFRAME
围绕窗口画一个框
SWP_HIDEWINDOW
隐藏窗口
SWP_NOACTIVATE
不激活窗口
SWP_NOMOVE
保持当前位置(x和y设定将被忽略)
SWP_NOREDRAW
窗口不自动重画
SWP_NOSIZE
保持当前大小(cx和cy会被忽略)
SWP_NOZORDER
保持窗口在列表的当前位置(hWndInsertAfter将被忽略)
SWP_SHOWWINDOW
显示窗口
SWP_FRAMECHANGED
强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变
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_NOSIZE&
=
&H1
'
保持窗口大小
Private
Const
SWP_NOMOVE&
=
&H2
'
保持窗口位置
Private
Sub
Form_Load()
SetWindowPos
Mehwnd,
HWND_TOPMOST,
0,
0,
0,
0,
SWP_NOMOVE
Or
SWP_NOSIZE
'
将窗口设为总在最前
End
Sub
在windows XP任务栏上点右键,选择“属性”,会打开“任务栏和开始菜单”属性窗沪护高咎薨侥胳鞋供猫口,勾选“将任务栏保持在其它窗口的前端”一项(如下图),确定。因为系统时间是显示在任务栏区,任务栏在前,那么时间就在前。
以上就是关于vb的窗体怎么显示在最前端全部的内容,包括:vb的窗体怎么显示在最前端、用QProcess重启后的程序怎么放在窗口最前端显示、怎么把VB做的程序总是在前端显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)