VB如何把窗体放到最前并且透明.是要放在全屏游戏的前面.我用了下马的代码不成功,根本显示不出来.但是鼠标移动过去点能把他点出来的但是就是看不到窗体是黑的.
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 LongPrivate Sub Timer1_Timer()
SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 2 Or 1
End Sub
我要实现的功能就是在全屏游戏或者播放电影全屏的时候我的窗口总是能在一个位置显示.
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 LongPrivate Sub Timer1_Timer()
SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, 2 Or 1
End Sub
我要实现的功能就是在全屏游戏或者播放电影全屏的时候我的窗口总是能在一个位置显示.
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1Private Sub Form_Load()
Dim rtn As Long
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, 0, 200, LWA_ALPHA
End Sub
这个可以
'窗体透明API函数的声明
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Function SetFormTouMing(INFormHWND As Long, INSetNum As Integer)
Dim Ret As Long
Ret = GetWindowLong(INFormHWND, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong INFormHWND, GWL_EXSTYLE, Ret
'设置窗体透明度
SetLayeredWindowAttributes INFormHWND, 0, INSetNum, LWA_ALPHA
End Function
使用方法(举例):SetFormTouMing Me.hwnd, 180然后顶置窗体用SetWindowPos
因为这个函数比较简单,所以就不解释了哈~
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
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
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 Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const HWND_TOPMOST = -1Private Sub Form_Load()
Dim rtn As Long
Me.BackColor = vbBlue
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, vbBlue, 190, LWA_COLORKEY
SetWindowPos Me.hwnd, HWND_TOPMOST, Me.Left / Screen.TwipsPerPixelX, _
Me.Top \ Screen.TwipsPerPixelY, Me.Width \ Screen.TwipsPerPixelX, _
Me.Height \ Screen.TwipsPerPixelY, 0
End Sub
以上代码显示的窗体级别跟全屏程序是同一级别的,只不过先装载的会被后装载的覆盖(在快播全屏下测试通过, 游戏的全屏原理“应该”也一样。)还有一点:不确定“免打扰模式”对此是否有影响。由于本人不喜游戏,没做过测试,LZ自己测试下哈测试后 麻烦说下结果
谢谢!