十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用SetWindowPos函数,通用部分声明: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 a = -1
Private Const b = H1
Private Const c = H2窗体部分:
Private Sub Form_Load()
SetWindowPos Me.hwnd, a, 0, 0, 0, 0, b Or c
End Sub这个是在窗体加载的时候置顶,SetWindowPos Me.hwnd, a, 0, 0, 0, 0, b Or c 是窗体置顶的实现代码如果你要按下按钮就实现指定可以把它添加到command1_click事件中即可
用SetWindowPos函数,通用部分声明: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 a = -1
Private Const b = H1
Private Const c = H2窗体部分:
Private Sub Form_Load() 。
Visual Basic是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。
API函数SetWindowPos
'这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态)
Public
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
-----------
Long,欲定位的窗口
'hWndInsertAfter
-
Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:
Public
Const
HWND_BOTTOM
=
1
'将窗口置于窗口列表底部
Public
Const
HWND_TOP
=
'将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
Public
Const
HWND_TOPMOST
=
-1
'将窗口置于列表顶部,并位于任何最顶部窗口的前面
Public
Const
HWND_NOTOPMOST
=
-2
'将窗口置于列表顶部,并位于任何最顶部窗口的后面
'x
--------------
Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示
'y
--------------
Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示
'cx
-------------
Long,指定新的窗口宽度
'cy
-------------
Long,指定新的窗口高度
'wFlags
---------
Long,包含了旗标的一个整数
Public
Const
SWP_FRAMECHANGED
=
H20
'强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变
Public
Const
SWP_DRAWFRAME
=
SWP_FRAMECHANGED
'围绕窗口画一个框
Public
Const
SWP_HIDEWINDOW
=
H80
'隐藏窗口
Public
Const
SWP_NOACTIVATE
=
H10
'不激活窗口
Public
Const
SWP_NOMOVE
=
H2
'保持当前位置
(x和y设定将被忽略)
Public
Const
SWP_NOREDRAW
=
H8
'窗口不自动重画
Public
Const
SWP_NOSIZE
=
H1
'保持当前大小
(cx和cy会被忽略)
Public
Const
SWP_NOZORDER
=
H4
'保持窗口在列表的当前位置
(hWndInsertAfter将被忽略)
Public
Const
SWP_SHOWWINDOW
=
H40
'显示窗口
'用法示例
SetWindowPos
Form1.hwnd,
HWND_TOPMOST,
0,
0,
0,
0,
SWP_NOMOVE
Or
SWP_NOSIZE
这是一个关于模态窗口与非模态窗口的问题。
实现非模态窗口也没什么难度
Dim form As New Form1
form.TopMost = True
form.Show()
你再将鼠标移到父窗口上,弹出的窗口也不会消失。
参数编辑
hWnd:窗口句柄。
hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
查看该参数的使用方法,请看说明部分。
x:以客户坐标指定窗口新位置的左边界。
Y:以客户坐标指定窗口新位置的顶边界。
cx:以像素指定窗口的新的宽度。
cy:以像素指定窗口的新的高度。
uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
SWP_ASYNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。
SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。
SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。
SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
SWP_HIDEWINDOW;隐藏窗口。
SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
SWP_NOMOVE:维持当前位置(忽略X和Y参数)。
SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。
SWP_NOREDRAW:不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。
SWP_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。
SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW:显示窗口。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误消息,请调用GetLastError函数。
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 Sub Form_Load()
SetWindowPos Me.HWnd, -1, 0, 0, 0, 0, 2 Or 1
End Sub
'你可以根据参数自己设定,不过,要置顶在游戏那种窗口前面有些不行,因为人家游戏抓住了句柄,无法抢在它前面...顶多只能热键来呼应你的程序