首页 > 代码库 > VB API 之 透明窗体创建
VB API 之 透明窗体创建
首先我们要用到的API函数有SetWindowLong,GetWindowLong,SetLayeredWindowAttributes。
SetWindowLong函数原型:
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long
函数功能:
该函数用来改变指定窗口的属性
参数:
hwnd: Long //窗口的句柄
nIndex:Long //大于等于0的偏移值。可以是以下指定的值:
常量 | 常量值 | 意义 |
---|---|---|
GWL_EXSTYLE | -20 | 设定一个新的扩展风格。 |
GWL_HINSTANCE | -6 | 设置一个新的应用程序实例句柄。 |
GWL_ID | -12 | 设置一个新的窗口标识符。 |
GWL_STYLE | -16 | 设定一个新的窗口风格。 |
GWL_USERDATA | -21 | 设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。 |
GWL_WNDPROC | -4 | 为窗口过程设定一个新的地址。 |
GWL_HWNDPARENT | -8 | 改变子窗口的父窗口,应使用SetParent函数。 |
常量 | 常量值 | 意义 |
---|---|---|
DWL_DLGPROC | DWLP_MSGRESULT + sizeof(LRESULT) | 设置对话框过程的新地址。 |
DWL_MSGRESULT | 0 | 设置在对话框过程中处理的消息的返回值。 |
DWL_USER | DWLP_DLGPROC + sizeof(DLGPROC) | 设置的应用程序私有的新的额外信息,例如一个句柄或指针。 |
dwNewLong
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) _
As Long
值 | 意义 |
---|---|
GWL_EXSTYLE (-20) | 获得扩展窗口风格。 |
GWL_HINSTANCE (-6) | 获得应用实例的句柄。 |
GWL_HWNDPARENT (-8) | 如果父窗口存在,获得父窗口句柄。 |
GWL_ID (-12) | 获得窗口标识。 |
GWL_STYLE (-16) | 获得窗口风格。 |
GWL_USERDATA (-21) | 获得与窗口有关的32位值。每一个窗口均有一个由创建该窗口的应用程序使用的32位值。 |
GWL_WNDPROC (-4) | 获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程。 |
值 | 意义 |
---|---|
DWL_DLGPROC (4) | 获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。 |
DWL_MSGRESULT (0) | 获得在对话框过程中一个消息处理的返回值。 |
DWL_USER (8) | 获得应用程序私有的额外信息,例如一个句柄或指针。 |
Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hwnd As Long, _
ByVal crKey As Long, _
ByVal bAlpha As Long, _
ByVal dwFlags As Long) _
As Long
函数功能:此函数用于设置分层窗口透明度,常和 UpdateLayeredWindow 函数结合使用
参数:
hwnd:Long //窗口句柄
crkey:Long //指定需要透明的背景颜色值,可用RGB()宏
bAlpha:Long //设置透明度,0表示完全透明,255表示不透明
dwFlags:Long //透明方式
Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" _ (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) _ As LongPrivate Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" _ (ByVal hwnd As Long, _ ByVal nIndex As Long) _ As LongPrivate Const GWL_EXSTYLE = (-20)Private Const LWA_ALPHA As Long = &H2Private Const WS_EX_LAYERED As Long = &H80000Private Declare Function SetLayeredWindowAttributes Lib "user32" _ (ByVal hwnd As Long, _ ByVal crKey As Long, _ ByVal bAlpha As Long, _ ByVal dwFlags As Long) _ As LongPrivate Sub Form_Load() Dim p As Long p = GetWindowLong(Me.hwnd, GWL_EXSTYLE) ‘取得当前窗口属性 Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, p Or WS_EX_LAYERED) ‘加上一个半透明属性 Call SetLayeredWindowAttributes(Me.hwnd, 0, 125, LWA_ALPHA)End Sub
VB API 之 透明窗体创建