怎么做透明窗体
在vb中可以设置窗体隐藏,但是不能直接设置窗体的透明效果。可以调用API函数SetWindowLong()和GetWindowLong()实现,下面是这两个函数的用法说明以及实例,实例没有测试过,你自己运行看是否有效。
另一种方法是使用CreateCompatibleBitmap ()函数,实例在最后。
SetWindowLong() 函数
VB声明
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwN...全部
在vb中可以设置窗体隐藏,但是不能直接设置窗体的透明效果。可以调用API函数SetWindowLong()和GetWindowLong()实现,下面是这两个函数的用法说明以及实例,实例没有测试过,你自己运行看是否有效。
另一种方法是使用CreateCompatibleBitmap ()函数,实例在最后。
SetWindowLong() 函数
VB声明
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
说明
在窗口结构中为指定的窗口设置信息
返回值
Long,指定数据的前一个值
参数表
参数 类型及说明
hwnd Long,欲为其取得信息的窗口的句柄
nIndex Long,请参考GetWindowLong函数的nIndex参数的说明
dwNewLong Long,由nIndex指定的窗口信息的新值
GetWindowLong ()函数
VB声明
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
说明
从指定窗口的结构中取得信息
返回值
Long,由nIndex决定。
零表示出错。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,欲为其获取信息的窗口的句柄
nIndex Long,欲取回的信息,可以是下述任何一个常数:
GWL_EXSTYLE 扩展窗口样式
GWL_STYLE 窗口样式
GWL_WNDPROC 该窗口的窗口函数的地址
GWL_HINSTANCE 拥有窗口的实例的句柄
GWL_HWNDPARENT 该窗口之父的句柄。
不要用SetWindowWord来改变这个值
GWL_ID 对话框中一个子窗口的标识符
GWL_USERDATA 含义由应用程序规定
DWL_DLGPROC 这个窗口的对话框函数地址
DWL_MSGRESULT 在对话框函数中处理的一条消息返回的值
DWL_USER 含义由应用程序规定
创建透明的窗体实例 1。
注释:form上有Command1, command2两个Button并事先设定form之BorderStyle = 0
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
Const GWL_EXSTYLE = (-20)
Const WS_EX_TRANSPARENT = &H20&
Private PreValue As Long
Private Sub Command2_Click() 注释:还原变成不透明
Call SetWindowLong(Me。
hwnd, GWL_EXSTYLE, PreValue)
Me。Hide
Me。Show
End Sub
Private Sub Form_Load()
Dim i As Long
i = GetWindowLong(Me。
hwnd, GWL_EXSTYLE)
注释:变成透明的Form
PreValue = SetWindowLong(Me。hwnd, GWL_EXSTYLE, i Or WS_EX_TRANSPARENT)
Me。
Show
DoEvents
Command1。Refresh 注释:令Command1可见
Command2。Refresh 注释:令Command2可见
End Sub
CreateCompatibleBitmap ()函数
VB声明
Declare Function CreateCompatibleBitmap Lib "gdi32" Alias "CreateCompatibleBitmap" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
说明
创建一幅与设备有关位图,它与指定的设备场景兼容
返回值
Long,执行成功返回位图句柄,零表示失败
参数表
参数 类型及说明
hdc Long,设备场景的句柄
nWidth Long,位图宽度,以像素为单位
nHeight Long,位图高度,以像素为单位
注解
内存设备场景即与彩色位图兼容,也与单色位图兼容。
这个函数的作用是创建一幅与当前选入hdc中的场景兼容。对一个内存场景来说,默认的位图是单色的。倘若内存设备场景有一个DIBSection选入其中,这个函数就会返回DIBSection的一个句柄。
如hdc是一幅设备位图,那么结果生成的位图就肯定兼容于设备(也就是说,彩色设备生成的肯定是彩色位图)
如果nWidth和nHeight为零,返回的位图就是一个1×1的单色位图
一旦位图不再需要,一定用DeleteObject函数释放它占用的内存及资源
生成透明窗体实例 2。
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim hBitmap As Integer
Me。
AutoRedraw = True
hBitmap = CreateCompatibleBitmap(Me。hdc, 0, 0)
SelectObject Me。hdc, hBitmap
Me。
Refresh
End Sub
。收起