窗口透明

why168 2006-01-21 09:26:28
问问啊,vb怎么才能让窗口透明啊!!!
在C#中只需要设置一个属性就行了.
VB怎么办啊,谢谢了~~~
...全文
216 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hellohuan 2006-01-28
  • 打赏
  • 举报
回复
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 Long
Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1
'其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255],dwFlags是透明方式
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, 50, LWA_ALPHA

End Sub
zyl910 2006-01-22
  • 打赏
  • 举报
回复
关键在于使用Windows 2000新增API:SetLayeredWindowAttributes

其他2000以后的编程工具的设置窗口透明的属性都是对SetLayeredWindowAttributes的封装
sakurako 2006-01-22
  • 打赏
  • 举报
回复
GetWindowLong(hwnd, GWL_EXSTYLE) '取得当前窗口属性
该句去掉括号或者在前面添加Call
sakurako 2006-01-22
  • 打赏
  • 举报
回复
'//VB中也可以改窗体控件的一个属性就可以了
'// 好像是以a开始的一点属性。
'也许你说的是VB.NET,确实很方便,但VB6中不可以
'作者:sakurako
'该方法适用于2000/XP系统,将下面代码放在一个模块中便可,调用时使用:
'SetTrans Form1.hwnd, 100 ' 100为透明度,最大255

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
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 Long, ByVal dwFlags As Long) As Long

Public Const GWL_EXSTYLE = (-20)
Public Const LWA_ALPHA As Long = &H2
Public Const WS_EX_LAYERED As Long = &H80000

Public Sub SetTrans(ByVal hwnd As Long, ByVal Alpha As Integer)

GetWindowLong(hwnd, GWL_EXSTYLE) '取得当前窗口属性
Call SetWindowLong(hwnd, GWL_EXSTYLE, preStyle Or WS_EX_LAYERED)
'加上一个透明属性
On Error Resume Next
Call SetLayeredWindowAttributes(hwnd, 0, Alpha, LWA_ALPHA)

End Sub
cai_dong_hai 2006-01-22
  • 打赏
  • 举报
回复
VB中也可以改窗体控件的一个属性就可以了
好像是以a开始的一点属性。

大鸟吴 2006-01-21
  • 打赏
  • 举报
回复
VB没这个属性~~得调用API

SetWindowLong hwnd, GWL_EXSTYLE, WS_EX_TRANSPARENT

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧