TopMost这个词也许你很陌生,但具有TopMost窗口的软件你应该早就接触过,如Office97、网络吸血鬼、IE等。所谓TopMost窗口是指哪些始终出现在桌面的最前方且不会被其它窗口覆盖的窗口,如网络吸血鬼中的下载图标。
一般憎况下,在运行VB程序时,窗口总有可能会被其它程序的窗口所覆盖。如何在自己的应用程序中实现TopMost类型的窗口呢?我们可以通过调用Windows API函数SetWindowPos来实现。
一、SetWindowPos函数介绍 SetWindowPos函数功能是将一个窗口在三维空间中移动,利用它,你可以改变一个窗口的位置,甚至可以在Z轴上改变(Z轴决定了一个窗口和其它窗口的前后关系),你还可以改变窗口的尺寸。为了实现TopMost类型的窗口,我们只需调用该函数,将窗口放在所有窗口的前面并永远保持在最前面即可。要想在VB中使用SetWindowPos函数,必须在程序的代码模块中进行如下的函数声明:
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
SetWindowPos函数各个参数的含义见表1。
表1 SetWindowPos函数的参数解释
参数名 参数含义 hwnd 要移动的窗口的句柄(可以用窗体的hwnd属性) hWndInsertAfter 关于如何在Z轴上放置窗口的标记(具体见表2) x 相当于窗口的Left属性 y 相当于窗口的Top属性 cx 相当于窗口的Right属性 cy 相当于窗口的Bottom属性 wFlags 关于如何移动窗口的标记(具体见表3)
表2 HWndInsertAfter参数的可能取值及含义
hWndInsertAfter的可能取值 功能 某一窗口的句柄 将窗口放在该句柄指定的窗口后面 HWND_BOTTOM(1) 把窗口放在Z轴的最后,即所有窗口的后面 HWND_TOP(0) 将窗口放在Z轴的前面,即所有窗口的前面 HWND_TOPMOST(-1) 使窗口成为“TopMost”类型的窗口,这种类型
的窗口总是在其它窗口的前面,真到它被关闭 HWND_NOTOPMOST(-2) 将窗口放在所有“TopMost”类型
窗口的后面、其它类型窗口的前面
表3 wFlags参数的可能值及含义
wFlags参数的可能值 功能 SWP_DRAWFRAME(&H20) 移动窗口后重画窗口及其上的所有内容 SWP_HIDEWINDOW(&H80) 隐藏窗口,窗口隐藏后既不出现在屏幕上也不出现在任
务栏上,但它仍然处于激活状态 SWP_NOACTIVATE(&H10) 窗口移动后不激活窗口,当然,如果窗口在移动前就是
激活的则例外 SWP_NOCOPYBITS(&H100) 当窗口移动后,不重画它上面的任何内容 SWP_NOMOVE(&H2) 不移动窗口(即忽略X和Y参数) SWP_NOSIZE(&H1) 不改变窗口尺寸(即忽略Cx和Cy参数) SWP_NOREDRAW(&H8) Do not remove the image of the window in its former position
from the screen. In other words,leave behind a ghost image
of the window in its old position SWP_NOZORDER(&H4) 不改变窗口听Z轴位置(即忽略hWndInsertAfter参数) SWP_SHOWWINDOW(&H40) 显示窗口(之前必须使用过SWP_HIDEWINDOW
隐藏窗口)
前面已提到,利用SetWindowPos函数可以决定窗口在Z轴中的位置,具体如何放置,需根据表2给hWndInsertAfter参数赋予合适的值。
另外,wFlags参数为SetWindowPos函数移动窗口提供了附加的特性,我们可以通过or运算将表3中若干个wFlags结合在一起使用,如SWP_NOMOVE Or SWP_NOSIZE既不移动窗口又不改变窗口的尺寸。但是要注意不要将功能冲突的值结合使用,如SWP_HIDEWINDOW Or SWP_SHOWWINDOW。
二、程序举例
下面,我们以一个简单的例子说明SetWindowPos函数的用法及如何实现TopMost类型窗口。新建工程,在普通窗体Form1上放置两个命令按钮cmdNormal和cmdTopMost,命令按钮的Caption属性分别为“变成普通窗口”和“变成TopMost窗口”。cmdNormal的Enabled属性为False。为工程添加代码模块Moudall,在其中放置如下声明代码:
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
Public Const SWP_NOMOVE= &H2 '不移动窗体
Public Const SWP_NOSIZE=&H1 '不改变窗体尺寸
Public Const Flag=SWP_NOMOVE Or SWP_NOSIZE
Public Const HWND_TOPMOST=-1 '窗体总在最前面
Public Const HWND_NOTOPMOST=-2 '窗体不在最前面
为窗体添加代码如下:
Private Sub cmdNormal_Click()
cmdTopMost.Enabled=True
cmdNormal. Enabled= False
Form1.Captio = "现在是普通窗口"
SetWindowPos Form1.hwnd,HWND_NOTOPMOST,0,0,0,0,Flag
End Sub
Private Sub cmdTopMost_Click()
cmdTopMost.Enabled = False
cmdNormal.Enabled = True
Form1.Caption = "现在是TopMost窗口"
SetWindowPos Form1.hwnd,HWND_TOPMOST,0,0,0,0,Flag
End Sub
按下F5,运行程序,单击“变成TopMost窗体”命令按钮,此时窗口即成为TopMost类型。随意打开桌面上的其它窗口,Form1总是处在其它窗口的前面;如果单击“变成普通窗体”按钮。则一切又恢复正常,一旦打开了其它窗口,则其它窗口会将Form1窗口覆盖。
本程序用Visual Basic 5.0编写,在Pwin95、Pwin97环境下运行正常。
分享到:
相关推荐
### 使用VB制作TopMost类型窗口 #### 知识点概览 本文将详细介绍如何使用Visual Basic(简称VB)创建一种特殊类型的窗口——TopMost窗口。TopMost窗口是一种始终位于其他所有窗口之上的窗口,这对于某些应用程序来...
### 制作TopMost窗口 #### 一、概述 在Windows编程中,有时我们需要让某个窗口始终处于其他窗口之上,这种类型的窗口被称为TopMost窗口。本文档将介绍如何使用Visual Basic(简称VB)来实现一个TopMost窗口。通过...
### 知识点:精彩编程与编程技巧-制作TopMost窗口 #### 一、TopMost窗口的概念 在图形用户界面(GUI)应用开发中,有时我们需要一个窗口始终保持在其他所有窗口之上,这样的窗口称为“置顶窗口”或“TopMost窗口”...
以上就是VB制作悬浮窗体的基本步骤。通过理解这些知识点,你可以创建出具有个性化功能的悬浮窗体。提供的源码可能包含这些实现,读者可以下载后进行学习和实践。在深入研究API和窗体管理机制后,你将能更好地理解和...
这可以通过设置窗体的`TopMost`属性为`True`来实现,使其始终位于其他窗口之上。 此外,考虑到USB扫码枪可能有不同的设置和输出格式,程序可能需要进行一些自定义配置,如调整延迟时间以适应不同速度的扫码枪,或者...
### 如何制作浮动式窗口——精彩编程与编程技巧 在计算机编程领域,浮动窗口是一种非常实用的功能,它可以为用户提供更好的交互体验。本文将基于提供的部分源代码,详细讲解如何使用Visual Basic(VB)通过调用...
本篇将详细讲解如何利用VB来制作一个这样的窗口,并涉及界面编程的基础知识。 首先,让我们了解VB中的窗体(Form)。窗体是VB应用程序的基本组成部分,它提供了用户与程序交互的界面。在VB中,我们可以通过Form ...
- 为了让启动窗体在程序启动时首先显示,需要将其`TopMost`属性设置为`True`,这样它将在所有其他窗口之上显示。 - 设置适当的窗体大小和位置,可以使用`StartPosition`属性来控制窗体在屏幕上的初始位置。 4. **...
这些功能在特定的应用场景下非常有用,例如在制作屏幕覆盖层或特殊效果时。 #### 窗体最前 窗体最前是指让一个窗口始终保持在所有其他窗口之上。这样做的好处是可以确保用户能够持续关注此窗口中的内容,而不会被...
在VB6中,这可能通过创建一个无边框窗体并设置其属性,如TopMost(始终在最前)和WindowState(最小化或隐藏标题栏)来实现。用户可以通过双击或者右键菜单来启动和关闭这个小时钟。 标签“时钟”进一步强调了这个...
p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库...
代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...