用函数SetLayeredWindowAttributes 
--bAlpha是透明度,取值范围是[ 0 - 255 ]
--crKey 是去处颜色,用于设计不规则窗体'用于2000或xp...   98不行
'------------------------- 声明 ------------------------Option Explicit
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 LongPrivate Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)       '扩展窗口样式
Private Const LWA_ALPHA = &H2           '透明参数'------------------------- 代码 ------------------------Private Sub Command1_Click()
    Dim rtn As Long
    rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE) '取回当前窗口样式
    rtn = rtn Or WS_EX_LAYERED      '加上 WS_EX_LAYERED 窗口样式
    SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn   '设置窗口样式
    
    Dim iTran As Integer '透明度 0-255
    iTran = 200
    SetLayeredWindowAttributes Me.hwnd, 0, iTran, LWA_ALPHA
End Sub

解决方案 »

  1.   


    使用Windows2000新增API——SetLayeredWindowAttributes
    在Win9X不可能实现窗体的半透明的!以前回答的:
    ====================================================================
    在Win9X不可能实现窗体的半透明
    那是受Windows对窗体的绘制方式的限制
    Windows系统实际上是把所有显示的窗体的内容放在一个位图中
    等窗体需要更新时
    就会设置窗体的绘制区域(就是把在它上面的窗体的区域屏蔽掉)
    在发送WM_PAINT、WM_NCPAINT消息让程序去绘制
    所以本窗体下屏幕是不会更新的
    而半透明的计算是需要下层图形的(透明计算公式:绘制的RGB分量 = 下层图形该点的RGB分量 + CLng((上层图形该点的RGB分量 - 下层图形该点的RGB分量) * 透明度),0<=透明度<=1,0完全透明,1不透明)至于游戏中为什么能半透明
    原理实在是太简单
    PhotoShop用过吗
    就是用多图层合并办到的你没有注意吗
    游戏中的背景层都是这个游戏的画面
    根本不是Windows桌面
    而且此窗体非彼窗体
    这根本不是Windows系统的窗体
    这是游戏中画出来的窗体这样 上层图形、下层图形 都知道了,计算一下显示的颜色,半透明效果不就出来了!