CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  控件

怎么才能使我的菜单和控件成透明的,在一定时间以后就自动消失。

楼主liebaoyang(liebao)2003-09-01 17:58:14 在 VB / 控件 提问

怎么才能使我的菜单和控件成透明的,在一定时间以后就自动消失。  
  有源代码的,就更好。  
  问题点数: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

相关问题

  • 控件透明
  • --> --> --> 透明控件 ?
  • 透明控件
  • 控件DataSource消失
  • 菜单控件的源码
  • 控件的右键菜单
  • web页的菜单控件
  • 透明的TMemo控件
  • 控件背景透明
  • 控件透明的问题

关键词

  • dll
  • code
  • longprivate
  • hhook
  • byval
  • lparam
  • hwnd
  • as long
  • callwndproc
  • wparam

得分解答快速导航

  • 帖主:liebaoyang

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo