怎么才能使我的菜单和控件成透明的,在一定时间以后就自动消失。
怎么才能使我的菜单和控件成透明的,在一定时间以后就自动消失。
有源代码的,就更好。
问题点数:0、回复次数:5Top
1 楼keekeep(阿当)回复于 2003-09-01 22:14:16 得分 0
Option Explicit
Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
Private Const WH_CALLWNDPROC As Long = 4
Private Const HC_ACTION As Long = 0
Private Type CWPSTRUCT
lParam As Long
wParam As Long
message As Long
hwnd As Long
End Type
Private Const WM_CREATE As Long = &H1
Private Declare Function GetClassNameA Lib "user32.dll" (ByVal hwnd As Long, lpClassName As Any, ByVal nMaxCount As Long) As Long
Private Const WC_Menu As String = "#32768"
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_LAYERED As Long = &H80000
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const LWA_COLORKEY As Long = &H1
Private Const LWA_ALPHA As Long = &H2
'##########################################################
Public AlphaNum As Byte
Private hHook As Long
Public Sub Hook()
If hHook Then Exit Sub
hHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf CallWndProc, 0, App.ThreadID)
End Sub
Public Sub UnHook()
If hHook = 0 Then Exit Sub
UnhookWindowsHookEx hHook
hHook = 0
End Sub
Private Function CallWndProc(ByVal code As Long, ByVal wParam As Long, ByRef lParam As CWPSTRUCT) As Long
If code = HC_ACTION Then
If lParam.message = WM_CREATE Then
If WndClass(lParam.hwnd) = WC_Menu Then
'Debug.Print lParam.hWnd
SetWindowLong lParam.hwnd, GWL_EXSTYLE, GetWindowLong(lParam.hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes lParam.hwnd, 0, AlphaNum, LWA_ALPHA
End If
End If
End If
CallWndProc = CallNextHookEx(hHook, code, wParam, lParam)
End Function
Public Function WndClass(ByVal hwnd As Long) As String
Dim TempBytes(0 To &H100) As Byte
Dim rt As Long
rt = GetClassNameA(hwnd, TempBytes(0), &H100)
If rt <= 0 Then
WndClass = ""
Else
WndClass = StrConv(LeftB(TempBytes, rt), vbUnicode)
End If
End Function
你把上面代码放在标准模块里,再在Form1里放个text和一个HScroll,窗体里放以下代码:
Option Explicit
Private Sub Form_Load()
HScroll1_Change
'MsgBox WndClass(Me.hWnd) & "|"
Hook
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHook
End Sub
Private Sub HScroll1_Change()
HScroll1_Scroll
AlphaNum = HScroll1.Value
End Sub
Private Sub HScroll1_Scroll()
Text1.Text = HScroll1.Value
End Sub
你的菜单就是透明了,至于自动消失你可以放个Timer,在你点击菜单时开始计时并使菜单透明一段时间后计时停止菜单正常,或者也可以做从透明到不透明的渐变。随你了.Top
2 楼liebaoyang(liebao)回复于 2003-09-02 12:20:24 得分 0
谢谢,试试看,Top
3 楼5653325(等待开刃的刀)回复于 2003-09-02 19:36:23 得分 0
Public Const WS_EX_LAYERED = &H80000
Public Const GWL_EXSTYLE = (-20)
Public Const LWA_ALPHA = &H2
Public Const LB_SETHORIZONTALEXTENT = &H194
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
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, 0, 150, LWA_ALPHA
SetWindowLong Form2.hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes Form2.hwnd, 0, 100, LWA_ALPHA
SetWindowLong Form3.hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes Form3.hwnd, 0, 100, LWA_ALPHA
那个100为透明度,可以调
关于自动消失可以用timerTop
4 楼hisofty(瘦马)回复于 2003-09-02 21:29:37 得分 0
Zyl910斑竹写的:http://www.fantasiasoft.net/Zyl910/AlphaMenu.zipTop
5 楼welon(辉哥)回复于 2003-09-02 22:01:51 得分 0
请问如何能在win98/me中实现?Top




