请问怎样使窗口象qq一样始终在最上层,但不影响后台程序的运行

zhangwh6882 2002-08-23 07:32:23
不是象msgbox那样影响后台程序运行的窗口
...全文
232 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
truemichael 2002-08-31
用setwindowpos后,虽然窗体在最上,但仍可以操作该窗体下面的窗体,如何做到向msgbox那样,只能操作最上窗体?
回复
GLAY 2002-08-26
Option Explicit

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)

Private Sub Command1_Click()
Dim rtn
rtn = SetWindowPos(OnTop.hwnd, -1, 0, 0, 0, 0, 3)
'总是在前面
End Sub

Private Sub Command2_Click()
Dim rtn
rtn = SetWindowPos(OnTop.hwnd, -2, 0, 0, 0, 0, 3)
'取消总是在前面
End Sub
回复
ucme 2002-08-26
也可以用BringWindowToTop这个API函数,具体的定义方法我忘记了,不过就没有SetWindowPos这个函数那么多参数,也没有那么复杂
回复
Iamfish 2002-08-25
'==============================
'设置窗口总在最前面用到
'放在窗口的load中
' SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3 '设置
' SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 3 '取消
'==============================
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

'==============================
'移动窗口
'ReleaseCapture
'SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
'==============================
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const WM_NCRBUTTONDOWN = &HA4
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF010&
Public Const SC_MINIMIZE = &HF020&
Public Const SC_PREVWINDOW = &HF050&
Public Const SC_RESTORE = &HF120&

================================================================
Dream.fish正在学XML中...
回复
dsclub 2002-08-25
SetWindowPos
回复
hnpeter 2002-08-25
结帐吧
回复
jwt1982 2002-08-25
就是上面的东东,很久以前的东东了
回复
cgwr 2002-08-25
SetWindowPos Form1.hWnd -1,0,0,0,0,3

一句搞定.
回复
airy1727 2002-08-25
set!
回复
chenyu5188 2002-08-24
UP,楼上的方法都好!!!
回复
thirdapple 2002-08-23
【函数】
SetWindowPos

【操作系统】
Win9X:Yes
WinNT:Yes

【声明】
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

【说明】

这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态

【返回值】

Long,非零表示成功,零表示失败。会设置GetLastError

【其它】

窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序

【参数表】
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消息进入窗口,即使窗口的大小没有改变
《Swin_API》
--------------------------------------------------------------------
Made by Thirdapple's Studio(http://3rdapple.51.net/)
回复
jakseng 2002-08-23
用API

Public 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
回复
Tenner 2002-08-23
FormX.Show ,FormZ
其中FormX为你要在最前的窗口,FormZ为主窗口,这样FormX将永远在FormZ前面
如果想让窗口在所有窗口前,要用API
SetWindowPos Form.hWnd -1,0,0,0,0,3
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7487

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2002-08-23 07:32
社区公告
暂无公告