用函数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
--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
解决方案 »
- vb6 如何开发ActiveX控件 ,我想让asp调用使用
- multipart/form-data,POST文件上传问题
- vb6如何处理unicode编码的字符呀?
- COM+ 写网络硬盘Access Denied
- 两个不同类型的数组赋给变体数组的问题?
- 高分求救~怎样通过VB编程实现下载网页中的SWF文件!
- 问两个vb文件操作的问题
- 能在VB中調用EXCEL中的VBA程序嗎??
- 有没有专靠VB吃饭的兄弟?月薪多少?另外有没有在家办公的VB工作,推荐一个.谢.
- 求救!!vb程序在他人机器上不能正常运行
- 在线等,DATE控件用法 谢谢了
- 有个小问题,大家讲讲c,vb,vf的区别吧!虽然问题老土了点!
使用Windows2000新增API——SetLayeredWindowAttributes
在Win9X不可能实现窗体的半透明的!以前回答的:
====================================================================
在Win9X不可能实现窗体的半透明
那是受Windows对窗体的绘制方式的限制
Windows系统实际上是把所有显示的窗体的内容放在一个位图中
等窗体需要更新时
就会设置窗体的绘制区域(就是把在它上面的窗体的区域屏蔽掉)
在发送WM_PAINT、WM_NCPAINT消息让程序去绘制
所以本窗体下屏幕是不会更新的
而半透明的计算是需要下层图形的(透明计算公式:绘制的RGB分量 = 下层图形该点的RGB分量 + CLng((上层图形该点的RGB分量 - 下层图形该点的RGB分量) * 透明度),0<=透明度<=1,0完全透明,1不透明)至于游戏中为什么能半透明
原理实在是太简单
PhotoShop用过吗
就是用多图层合并办到的你没有注意吗
游戏中的背景层都是这个游戏的画面
根本不是Windows桌面
而且此窗体非彼窗体
这根本不是Windows系统的窗体
这是游戏中画出来的窗体这样 上层图形、下层图形 都知道了,计算一下显示的颜色,半透明效果不就出来了!