分享
 
 
 

用VB制作TopMost类型窗口

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

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窗口覆盖。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有