用VB制作TopMost类型窗口

笨笨qf

笨笨qf

2016-02-19 21:08

图老师小编精心整理的用VB制作TopMost类型窗口希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
TopMost这个词也许你很陌生,但具有TopMost窗口的软件你应该早就接触过,如Office97、网络吸血鬼、IE等。所谓TopMost窗口是指哪些始终出现在桌面的最前方且不会被其它窗口覆盖的窗口,如网络吸血鬼中的下载图标。
  一般憎况下,在运行VB程序时,窗口总有可能会被其它程序的窗口所覆盖。如何在自己的应用程序中实现TopMost类型的窗口呢?我们可以通过调用WindowsAPI函数SetWindowPos来实现。
  一、SetWindowPos函数介绍
  SetWindowPos函数功能是将一个窗口在三维空间中移动,利用它,你可以改变一个窗口的位置,甚至可以在Z轴上改变(Z轴决定了一个窗口和其它窗口的前后关系),你还可以改变窗口的尺寸。为了实现TopMost类型的窗口,我们只需调用该函数,将窗口放在所有窗口的前面并永远保持在最前面即可。要想在VB中使用SetWindowPos函数,必须在程序的代码模块中进行如下的函数声明:
  DeclareFunctionSetwindowPosLib"user32.dll"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsasLong)AsLong
  SetWindowPos函数各个参数的含义见表1。表1SetWindowPos函数的参数解释

-align="middle"width="182">参数名->-align="middle"width="334">参数含义->-align="middle"width="182">hwnd->-align="middle"width="334">要移动的窗口的句柄(可以用窗体的hwnd属性)->-align="middle"width="182">hWndInsertAfter->-align="middle"width="334">关于如何在Z轴上放置窗口的标记(具体见表2)->-align="middle"width="182">x->-align="middle"width="334">相当于窗口的Left属性->-align="middle"width="182">y->-align="middle"width="334">相当于窗口的Top属性->-align="middle"width="182">cx->-align="middle"width="334">相当于窗口的Right属性->-align="middle"width="182">cy->-align="middle"width="334">相当于窗口的Bottom属性->-align="middle"width="182">wFlags->-align="middle"width="334">关于如何移动窗口的标记(具体见表3)->表2HWndInsertAfter参数的可能取值及含义

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)-align="middle"width="214">hWndInsertAfter的可能取值->-align="middle"width="302">功能->-align="middle"width="214">某一窗口的句柄->-align="middle"width="302">将窗口放在该句柄指定的窗口后面->-align="middle"width="214">HWND_BOTTOM(1)->-align="middle"width="302">把窗口放在Z轴的最后,即所有窗口的后面->-align="middle"width="214">HWND_TOP(0)->-align="middle"width="302">将窗口放在Z轴的前面,即所有窗口的前面->-align="middle"width="214">HWND_TOPMOST(-1)->-align="middle"width="302">使窗口成为“TopMost”类型的窗口,这种类型
  的窗口总是在其它窗口的前面,真到它被关闭->-align="middle"width="214">HWND_NOTOPMOST(-2)->-align="middle"width="302">将窗口放在所有“TopMost”类型
  窗口的后面、其它类型窗口的前面->表3wFlags参数的可能值及含义

-align="middle"width="218">wFlags参数的可能值->-align="middle"width="298">功能->-align="middle"width="218">SWP_DRAWFRAME(&H20)->-align="middle"width="298">移动窗口后重画窗口及其上的所有内容->-align="middle"width="218">SWP_HIDEWINDOW(&H80)->-align="middle"width="298">隐藏窗口,窗口隐藏后既不出现在屏幕上也不出现在任
  务栏上,但它仍然处于激活状态->-align="middle"width="218">SWP_NOACTIVATE(&H10)->-align="middle"width="298">窗口移动后不激活窗口,当然,如果窗口在移动前就是
  激活的则例外->-align="middle"width="218">SWP_NOCOPYBITS(&H100)->-align="middle"width="298">当窗口移动后,不重画它上面的任何内容->-align="middle"width="218">SWP_NOMOVE(&H2)->-align="middle"width="298">不移动窗口(即忽略X和Y参数)->-align="middle"width="218">SWP_NOSIZE(&H1)->-align="middle"width="298">不改变窗口尺寸(即忽略Cx和Cy参数)->-align="middle"width="218">SWP_NOREDRAW(&H8)->-align="middle"width="298">Donotremovetheimageofthewindowinitsformerposition
  fromthescreen.Inotherwords,leavebehindaghostimage
  ofthewindowinitsoldposition->-align="middle"width="218">SWP_NOZORDER(&H4)->-align="middle"width="298">不改变窗口听Z轴位置(即忽略hWndInsertAfter参数)->-align="middle"width="218">SWP_SHOWWINDOW(&H40)->-align="middle"width="298">显示窗口(之前必须使用过SWP_HIDEWINDOW
  隐藏窗口)->

前面已提到,利用SetWindowPos函数可以决定窗口在Z轴中的位置,具体如何放置,需根据表2给hWndInsertAfter参数赋予合适的值。
  另外,wFlags参数为SetWindowPos函数移动窗口提供了附加的特性,我们可以通过or运算将表3中若干个wFlags结合在一起使用,如SWP_NOMOVEOrSWP_NOSIZE既不移动窗口又不改变窗口的尺寸。但是要注意不要将功能冲突的值结合使用,如SWP_HIDEWINDOWOrSWP_SHOWWINDOW。
  二、程序举例
  下面,我们以一个简单的例子说明SetWindowPos函数的用法及如何实现TopMost类型窗口。新建工程,在普通窗体Form1上放置两个命令按钮cmdNormal和cmdTopMost,命令按钮的Caption属性分别为“变成普通窗口”和“变成TopMost窗口”。cmdNormal的Enabled属性为False。为工程添加代码模块Moudall,在其中放置如下声明代码:
  DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
  PublicConstSWP_NOMOVE=&H2'不移动窗体
  PublicConstSWP_NOSIZE=&H1'不改变窗体尺寸
  PublicConstFlag=SWP_NOMOVEOrSWP_NOSIZE
  PublicConstHWND_TOPMOST=-1'窗体总在最前面
  PublicConstHWND_NOTOPMOST=-2'窗体不在最前面
  为窗体添加代码如下:
  PrivateSubcmdNormal_Click()
  cmdTopMost.Enabled=True
  cmdNormal.Enabled=False
  Form1.Captio="现在是普通窗口"
  SetWindowPosForm1.hwnd,HWND_NOTOPMOST,0,0,0,0,Flag
  EndSub
  PrivateSubcmdTopMost_Click()
  cmdTopMost.Enabled=False
  cmdNormal.Enabled=True
  Form1.Caption="现在是TopMost窗口"
  SetWindowPosForm1.hwnd,HWND_TOPMOST,0,0,0,0,Flag
  EndSub
  按下F5,运行程序,单击“变成TopMost窗体”命令按钮,此时窗口即成为TopMost类型。随意打开桌面上的其它窗口,Form1总是处在其它窗口的前面;如果单击“变成普通窗体”按钮。则一切又恢复正常,一旦打开了其它窗口,则其它窗口会将Form1窗口覆盖。
  本程序用VisualBasic5.0编写,在Pwin95、Pwin97环境下运行正常。->

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

用VB制作TopMost类型窗口

编程语言 网络编程
用VB制作TopMost类型窗口

制作真正的TopMost窗口

Delphi
制作真正的TopMost窗口

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用excel制作登录窗口

excel
用excel制作登录窗口

使用Topmost窗口并且不会产生闪烁的现象

编程语言 网络编程
使用Topmost窗口并且不会产生闪烁的现象

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用VB制作即时动态按钮

编程语言 网络编程
用VB制作即时动态按钮

用Director制作不规则窗口

设计软件 平面设计软件 广告设计软件
用Director制作不规则窗口

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

此时只有回忆分组图案_你悄声无息离开

此时只有回忆分组图案_你悄声无息离开

利用VB实现浮动按钮

利用VB实现浮动按钮
下拉加载更多内容 ↓