用VB制作TopMost类型窗口

2016-02-19 21:08 4 1 收藏

图老师小编精心整理的用VB制作TopMost类型窗口希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

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函数的参数解释

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)-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参数的可能取值及含义

-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参数的可能值及含义

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)-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环境下运行正常。->

来源:https://www.tulaoshi.com/n/20160219/1625335.html

延伸阅读
标签: flash教程
微软公司的风格似乎并不是墨守成规的,但是不知道为什么Windows界面总是没有什么变化。从Windows3.x到Windows9x,再到现在的Windows2000和WindowsXP看来看去总是那个样子,想自己改变一下也很麻烦……没有办法,既然我们拥有这个好用的工具,为什么不充分利用呢?所以我们用Flash模拟一个来过过瘾。不过,怎么好像还是...
软件界面生动与否很大程度上决定于你对窗口的设计和控制。事实上,Windows程序员可以对系统中的任何窗口进行操纵,它意味着,Windows程序员可以直接操纵任何正在运行的应用窗口;可以发现一个特定的应用是否在运行,如果该应用没有运行还可以启动它;可以重新排列屏幕上的所有窗口;还可以使其他应用的窗口最大化或最小化。下面我们探讨一种十分...
使用VB中的“安装大师”(SETUPWIZARD)可以制作出高水平,标准的“Windows式”安装盘。VB制作安装盘步骤如下: 1、在制作安装盘前必须关闭并退出VB环境,然后执行Setupwizard。 2、安装开始,要求用户选择项目文件。屏幕中的Projectfile文本框可键入所要制作安装的应用项目,后缀名为MAK文件,也可按Selectmakfile按钮来选择项目文件。...
你想拥有自己的电子家庭影集吗?其实用VB就能实现。方法如下: 准备:家庭普通照片经扫描后储存。 构想:照片一张接一张出现在屏幕中间,出现时的方式采取动态切换,上方一行标题从左向右移过,标题与照片的背景色随机变化。 关键:调用Bitblt Windows API函数实现照片的动态切换。 内容:工程由Forml和modluel构成。 ...
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing If MsgBox("請注意看關閉的視窗", MsgBoxStyle.Question + MsgBoxStyle.OKCancel, "關閉") = MsgBoxResult.OK Then Dim d As Double For d = 1 To 0 + 0.2 Step -0.2 System.Threading.Thread.Sleep(50) Applic...

经验教程

393

收藏

30
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部