Const HWND_TOPMOST = -1 ' 始终在最上面
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1 '使用当前尺寸
Const SWP_NOMOVE = &H2 '使用当前位置
Const SWP_NOACTIVATE = &H10 '不激活该窗口
Const SWP_SHOWWINDOW = &H40 '显示窗口Private Declare Sub 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)Private Sub Form_Activate()
SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
''Me.hWnd: 窗口句柄
'0,0,0,0: 窗口位置和尺寸,一般都为后面的参数忽略,所以设为0
End Sub
怎样使我的程序总处于屏幕最前方?(Always on top)
如果你想让你的程序处于前方,可以使用以下代码: Form1.ZOrder 配合计时器使用,每隔一段很小的时间间隔调用这种方法可以使窗体Form1处于屏幕前方,但是用户还是可能使别的窗体在短暂的时间里处于Form1的上方。所以这种方法并不能使窗体真正的实现Always on top,而要真正的Always on top可以使用API函数SetWindowPos,代码如下: '声明函数: Declare Function SetWindowPos Lib "user32" _(ByVal h%, ByVal hb%, ByVal x%, ByVal y%, _ByVal cx%,ByVal cy%,ByVal f%) As Integer Global Const SWP_NOMOVE = 2 Global Const SWP_NOSIZE = 1 Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE Global Const HWND_TOPMOST = -1 Global Const HWND_NOTOPMOST = -2 '把窗体放在最前面: res% = SetWindowPos (Form1.hWnd, HWND_TOPMOST, _0, 0, 0, 0, FLAGS) '如果res%=0, 就产生错误 '使窗体恢复普通模式:res% = SetWindowPos (Form1.hWnd, HWND_NOTOPMOST, _0, 0, 0, 0, FLAGS)
怎样使我的程序总处于屏幕最前方?(Always on top)
如果你想让你的程序处于前方,可以使用以下代码: Form1.ZOrder 配合计时器使用,每隔一段很小的时间间隔调用这种方法可以使窗体Form1处于屏幕前方,但是用户还是可能使别的窗体在短暂的时间里处于Form1的上方。所以这种方法并不能使窗体真正的实现Always on top,而要真正的Always on top可以使用API函数SetWindowPos,代码如下: '声明函数: Declare Function SetWindowPos Lib "user32" _(ByVal h%, ByVal hb%, ByVal x%, ByVal y%, _ByVal cx%,ByVal cy%,ByVal f%) As Integer Global Const SWP_NOMOVE = 2 Global Const SWP_NOSIZE = 1 Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE Global Const HWND_TOPMOST = -1 Global Const HWND_NOTOPMOST = -2 '把窗体放在最前面: res% = SetWindowPos (Form1.hWnd, HWND_TOPMOST, _0, 0, 0, 0, FLAGS) '如果res%=0, 就产生错误 '使窗体恢复普通模式:res% = SetWindowPos (Form1.hWnd, HWND_NOTOPMOST, _0, 0, 0, 0, FLAGS)
在form里Private Sub Form_Load()
rtn = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)
End Sub
'---------------------设置Windows处于TOp的API
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
Const SWP_NOMOVE = &H2 '不更动目前视窗位置
Const SWP_NOSIZE = &H1 '不更动目前视窗大小
Const HWND_TOPMOST = -1 '设定为最上层
Const HWND_NOTOPMOST = -2 '取消最上层设定
Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
'0.将 APP 视窗设定成永远保持在最上层
Public Sub FrmOnTop(Frm As Form, OnTop As Boolean)
If OnTop = True Then
SetWindowPos Frm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
Else
'取消最上层设定
SetWindowPos Frm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS
End If
End Sub使用方法:
'以下放到窗体:
form_load:
FrmOnTop(form1,true)
form_unload:
FrmOnTop(form1,false)
也是可以得 以上回答,仅代表个人观点 大家静静地,心平气和地做技术吧! 我是小山,我喜欢VB,现在学习C#和.net 欢迎您使用: SourceCode Explorer(源代码数据库)
来自: Http://www.dapha.net
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
QQ: 9181729
也是可以得 以上回答,仅代表个人观点 大家静静地,心平气和地做技术吧! 我是小山,我喜欢VB,现在学习C#和.net 欢迎您使用: SourceCode Explorer(源代码数据库)
来自: Http://www.dapha.net
个人主页: Http://Shawls.Yeah.Net
E-Mail: [email protected]
QQ: 9181729
Private mbOnTop As Boolean
Private Property Let OnTop(Setting As Boolean)
If Setting Then
SetWindowPos hwnd, -1, 0, 0, 0, 0, &H2 Or &H1
Else
SetWindowPos hwnd, -2, 0, 0, 0, 0, &H2 Or &H1
End If
mbOnTop = Setting
End Property在上面
ontop =true不再上面
ontop=false
假如form1是主窗体,form2是查询窗体,只要form2.show 0 ,form1行了。
用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 SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
以上放在form的申明部分
在form历来loads里写
SetWindowPos me.hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOSIZE