vb弹出窗口制作:用VB制作TopMost类型窗口来源: 发布时间:星期五, 2008年12月26日 浏览:83次 评论:0
TopMost这个词也许你很陌生但具有TopMost窗口软件Software你应该早就接触过如Office97、网络吸血鬼、IE等所谓TopMost窗口是指哪些始终出现在桌面最前方且不会被其它窗口覆盖窗口如网络吸血鬼中下载图标
般憎况下在运行VB时窗口总有可能会被其它窗口所覆盖如何在自己应用中实现TopMost类型窗口呢?我们可以通过Windows APISetWindowPos来实现 、SetWindowPos介绍 SetWindowPos功能是将个窗口在 3维空间中移动利用它你可以改变个窗口位置甚至可以在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 2、举例 下面我们以个简单例子介绍说明SetWindowPos使用方法及如何实现TopMost类型窗口新建工程在普通窗体Form1上放置两个命令按钮cmdNormal和cmdTopMost命令按钮Caption属性分别为“变成普通窗口”和“变成TopMost窗口”cmdNormalEnabled属性为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窗口覆盖 0
相关文章
读者评论
发表评论 |