|
- '使用这个函数,可以轻松的实现半透明窗体。按照微软的要求,透明窗体窗体在创建时应使用WS_EX_LAYERED参数(用CreateWindowEx),或者在创建后设置该参数(用SetWindowLong),选用后者。全部函数、常量声明如下:
- 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
- '其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255],dwFlags是透明方式,可以取两个值:当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明--这个功能很有用:我们不必再为建立不规则形状的窗体而调用一大堆区域分析、创建、合并函数了,只需指定透明处的颜色值即可.
- Private Const WS_EX_LAYERED = &H80000
- Private Const GWL_EXSTYLE = (-20)
- Private Const LWA_ALPHA = &H2
- Private Const LWA_COLORKEY = &H1
- '一个半透明窗体
- Private 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
复制代码 |
|