游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4983|回复: 14

求教:如何让我的窗口永远在指定的窗口上一层?

[复制链接]

7

主题

15

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2007-3-29 15:24:00 | 显示全部楼层 |阅读模式
如:已知一个窗口在任务管理器里的名字是:a.exe
我的窗口如何永远在它的上面?

以前有一个API代码是写在总置顶的,我只要在它的上面就OK

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
发表于 2007-3-29 15:30:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

Private Const HWND_TOPMOST = -1
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Onthetop(a As Form) '窗体总在最前函数
  Dim res As Long
  res = SetWindowPos(a.hwnd, HWND_TOPMOST, _
    0, 0, 0, 0, Flags)
End Sub

例子: Onthetop Me   '令当前窗体总在最前 .

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
发表于 2007-3-29 15:32:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

  把你想要的窗体  me.zorder 1  
  把那个目标窗体  me.zorder 0

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2007-3-29 15:34:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

用TOP_MOST属性

7

主题

15

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2007-3-29 16:16:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

我不要总在最前,我只要在某一个窗体的前面

7

主题

15

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2007-3-29 16:19:00 | 显示全部楼层

Re: Re:求教:如何让我的窗口永远在指定的窗口上一层?

zodane: Re:求教:如何让我的窗口永远在指定的窗口上一层?

  把你想要的窗体  me.zorder 1  
  把那个目标窗体  me.zorder 0


另外一个窗本不是我的程序本身的,是另外一个软件的窗体

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2007-3-29 16:25:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

需要说明的是,两个窗体不能同时AOP的,如果想实现几个窗口同时保持在
某个主窗口的上面,需要自己调整一下所有FORM的顺序...
让窗口一直在上面
很多流行软件都有这样一个选项:Always on Top。它可以让窗口在最上面,别的窗口不能父 盖它。我们在 VB 中,可以使用下面的方法来实现:
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOREDRAW = &H8
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_SHOWWINDOW = &H40
Private Const SWP_NOCOPYBITS = &H80
Private Const SWP_NOOWNERZORDER = &H200
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Private Const SWP_NOREPOSITION = SWP_NOOWNERZORDER Private Const HWND_TOP = 0
Private Const HWND_BOTTOM = 1
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2

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 mbOnTop As Boolean

Private Property Let OnTop(Setting As Boolean)
if Setting Then
SetWindowPos hwnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
Else
SetWindowPos hwnd, -2, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End If
mbOnTop = Setting
End Property

Private Property Get OnTop() As Boolean
'Return the private variable set in Property Let
OnTop = mbOnTop
End Property
调用 OnTop=True 即可让窗口 Always OnTop。

7

主题

15

帖子

17

积分

新手上路

Rank: 1

积分
17
 楼主| 发表于 2007-3-29 16:31:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

我指的是让我的窗体在别的软件的窗体之上。

88

主题

1125

帖子

1136

积分

金牌会员

Rank: 6Rank: 6

积分
1136
QQ
发表于 2007-3-29 19:22:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

明白了, 无能为力 .
你无法获得那个别的程序的句柄.

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2007-3-29 20:54:00 | 显示全部楼层

Re:求教:如何让我的窗口永远在指定的窗口上一层?

可以的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-4-12 22:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表