当前位置:编程学习 > VB >>

求VB窗口置顶如何制作

如题

 

谁知道说一下

追问:我的VB是精简版的

没有实例的

 

你能不能把您电脑上的所有实例给我用邮箱发过来啊

如果不行的话你能不能把这个完整版的VB的下载地址跟我说一下啊

 

我邮箱:619943612@qq.com

答案:如果采纳,采纳时选能解决,谢谢!

 

API函数SetWindowPos
'这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态)
Public 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

'hwnd ----------- Long,欲定位的窗口

'hWndInsertAfter - Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:
Public Const HWND_BOTTOM = 1 '将窗口置于窗口列表底部
Public Const HWND_TOP = 0 '将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序
Public Const HWND_TOPMOST = -1 '将窗口置于列表顶部,并位于任何最顶部窗口的前面
Public Const HWND_NOTOPMOST = -2 '将窗口置于列表顶部,并位于任何最顶部窗口的后面

'x -------------- Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示

'y -------------- Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示

'cx ------------- Long,指定新的窗口宽度

'cy ------------- Long,指定新的窗口高度

'wFlags --------- Long,包含了旗标的一个整数
Public Const SWP_FRAMECHANGED = &H20 '强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变
Public Const SWP_DRAWFRAME = SWP_FRAMECHANGED '围绕窗口画一个框
Public Const SWP_HIDEWINDOW = &H80 '隐藏窗口
Public Const SWP_NOACTIVATE = &H10 '不激活窗口
Public Const SWP_NOMOVE = &H2 '保持当前位置 (x和y设定将被忽略)
Public Const SWP_NOREDRAW = &H8 '窗口不自动重画
Public Const SWP_NOSIZE = &H1 '保持当前大小 (cx和cy会被忽略)
Public Const SWP_NOZORDER = &H4 '保持窗口在列表的当前位置 (hWndInsertAfter将被忽略)
Public Const SWP_SHOWWINDOW = &H40 '显示窗口
'用法示例 SetWindowPos Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

在VB安装目录下有各种示例程序,其中有一个带着置顶的操作,你可以把示例程序运行看看并读懂即可

用API函数即可,完整代码如下(声明+Form_Load事件):

Rem 窗口置顶的声明
Private 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
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Rem 窗口置顶的常数
Private Const HWND_TOPMOST = -1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_SHOWWINDOW = &H40

Private Const WS_DISABLED = &H8000000
Private Const GWL_EXSTYLE = (-20)
Private Sub Form_Load()
    Me.Show
    SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    SetWindowLong Me.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or WS_DISABLED
End Sub

在模块中写入如下声明代码:


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)

Form_Load事件里写入如下代码:

Private Sub Form_Load()
    Dim rtn
    rtn = SetWindowPos(hwnd, -1, 0, 0, 0, 0, 3)
End Sub

窗口总是在最前面显示

上一个:怎样用VB制作游戏挂
下一个:VB上午程序编程大题目~

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,