这个简单啊,引用API函数SetWindowPos就可以解决。下面看看我的代码:
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站建设、成都网站设计、鲁甸网络推广、小程序定制开发、鲁甸网络营销、鲁甸企业策划、鲁甸品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供鲁甸建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
Private Declare Function SetWindowPos Lib "user32.dll" (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
Const FLAG = SWP_NOMOVE Or SWP_NOSIZE
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
将窗口设置最前:Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAG)
取消窗口的最前:Call SetWindowPos(Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAG)
函数的第一个参数是根据实际情况改变的,它要求你给它传送一个窗口的句柄,这里的 Me.hwnd 就给函数传送了当前窗口的句柄,也就是将当前窗口前置或取消前置。如果要前置其他窗口,那么请向函数传送其他窗口的句柄,这个可以根据:FindWindow API函数获取。希望采纳意见,谢谢。。。
你是不是用的Visual Studio来开发的?如果是,这样操作:打开 项目 菜单 中的 XXX属性,在弹出的属性页选择最上面那个 应用程序 标签,里面有个启动窗体,你选择一下就可以了。
如果你不是用的visual Studio来开发的,那么可以考虑把另外一个窗口的visible属性先设置为false或者把你要显示的窗口改为对话框的形式,大小比另外一个窗口大一点或者一样(即 模态窗口,必须关闭才能继续操作),这样都可以实现你要的效果。
在某些情况下我们需要某个窗体总是在所有窗体的最前端,我们可以使用Form1.show
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
Me.hwnd,
HWND_TOPMOST,
0,
0,
0,
0,
SWP_NOMOVE
Or
SWP_NOSIZE
'
将窗口设为在所有窗口前端
End
Sub
你可以这样做,设置窗体的TopMost 属性为真!
Me.TopMost = True
Form.TopMost 属性
获取或设置一个值,指示该窗体是否应显示为最顶层窗体。
有一个Api函数···代码我等会给你···呵呵·· 好了···在下面···
Option Explicit
'控制任务栏的隐藏和显示的函数。函数的参数分别为 窗体句柄 窗体显示方式 窗体坐标 窗体坐标 窗体坐标 窗体坐标 函数工作方式标志
'用于确定窗体显示形式的常数为 hwnd_topmst=-1 将窗体保持在最前面 hwnd_notopmost=-2 不将窗体宝石在最前面
'swap_nosize=h1 窗体装入时不改变原有尺寸 swap_nomove=h2 窗体装入时保持原窗体设计师在屏幕上的位置
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
Const hwnd_topmost = -1
Const swp_nosize = H1
Const swp_nmove = H2
Private Sub Form_Load()
SetWindowPos Me.hwnd, hwnd_topmost, 0, 0, 0, 0, swp_nosize Or swp_nmove
'只有swp_nosize的时候大小不变但位置移到了左上角即(0,0)点;只有swp_nmove时位置不变但大小相当于为零;
'这里的“或”的关系是“逻辑加”,因为0001或0010为0011,1+2=3.这里不能用and,用and便为两个都为1才为1,所以结果为0000
End Sub
先调用
API函数
实现窗体总在最上,代码如下:
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
Const
HWND_TOPMOST
=
-1
Private
Sub
Form_Load()
'总在最上
SetWindowPos
Me.hwnd,
HWND_TOPMOST,
Me.Left
/
Screen.TwipsPerPixelX
_
,
Me.Top
\
Screen.TwipsPerPixelY,
Me.Width
\
Screen.TwipsPerPixelX,
_
Me.Height
\
Screen.TwipsPerPixelY,
End
Sub
然后在显示这个窗体时用模态,例如:
假设上面的窗体为Form1
Form1.Show
vbModal
这样窗体不仅会在最上,而且必须输入正确的密码才能访问别的窗体