VB如何实现不规则窗体
在窗体中放入一个pictures,图片背景是RGB255,0,0也就是红色的,要把图片的背景过滤掉,使窗体成为一个不规则窗体,如何实现?...
在窗体中放入一个pictures,图片背景是RGB 255,0,0也就是红色的,要把图片的背景过滤掉,使窗体成为一个不规则窗体,如何实现?
展开
3个回答
展开全部
'要用两个API
SetLayeredWindowAttributes的功能:
'其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255],当小于5时,
'鼠标通信透明,大于或等于5时鼠标不透明,dwFlags是透明方式,可以取两个值:当取值为 &H2 时,
'crKey参数无效,bAlpha参数有效;当取值为 &H1 时,bAlpha参数有效而窗体中的所有颜色为crKey
'的地方将变为透明--这个功能很有用:我们不必再为建立不规则形状的窗体而调用一大堆区域分析、
'创建、合并函数了,只需指定透明处的颜色值即可,哈哈哈哈!请看具体代码。
'代码: 一个部分透明窗体
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 Sub Form_Load()
SetWindowLong hwnd, (-20), &H80000
SetLayeredWindowAttributes Me.hwnd, vbRed, 5, &H1
End Sub
SetLayeredWindowAttributes的功能:
'其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255],当小于5时,
'鼠标通信透明,大于或等于5时鼠标不透明,dwFlags是透明方式,可以取两个值:当取值为 &H2 时,
'crKey参数无效,bAlpha参数有效;当取值为 &H1 时,bAlpha参数有效而窗体中的所有颜色为crKey
'的地方将变为透明--这个功能很有用:我们不必再为建立不规则形状的窗体而调用一大堆区域分析、
'创建、合并函数了,只需指定透明处的颜色值即可,哈哈哈哈!请看具体代码。
'代码: 一个部分透明窗体
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 Sub Form_Load()
SetWindowLong hwnd, (-20), &H80000
SetLayeredWindowAttributes Me.hwnd, vbRed, 5, &H1
End Sub
2010-05-21
展开全部
首先声明三个API函数:
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 '透明窗体
Const WS_EX_LAYERED = &H80000
Const GWL_EXSTYLE = (-20)
Const LWA_ALPHA = &H2
Const LWA_COLORKEY = &H1
Private Sub Form_Load()
rtn = GetWindowLong(hwnd, GWL_EXSTYLE) '取得窗体的扩展样式值
rtn = rtn Or WS_EX_LAYERED '原始值上添加Layered样式
SetWindowLong hwnd, GWL_EXSTYLE, rtn '设置窗体扩展样式值
SetLayeredWindowAttributes hwnd, "此处填写图片的背景色",0,LWA_COLORKEY
End Sub
注:窗体的Appearance属性设为0
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 '透明窗体
Const WS_EX_LAYERED = &H80000
Const GWL_EXSTYLE = (-20)
Const LWA_ALPHA = &H2
Const LWA_COLORKEY = &H1
Private Sub Form_Load()
rtn = GetWindowLong(hwnd, GWL_EXSTYLE) '取得窗体的扩展样式值
rtn = rtn Or WS_EX_LAYERED '原始值上添加Layered样式
SetWindowLong hwnd, GWL_EXSTYLE, rtn '设置窗体扩展样式值
SetLayeredWindowAttributes hwnd, "此处填写图片的背景色",0,LWA_COLORKEY
End Sub
注:窗体的Appearance属性设为0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然有人发了函数,我来总结吧,哈哈哈:)
实际上,只要通过一定的运算,把某些纯色的部分通过正/反(恕我无知,只能用这个词来形容了)运算,把与某些值相同的,或者与系统相同的像素去掉,就OK了。
大部分网游启动时的不规则窗体都是这样弄的,先做好一幅规则的画,再把不要的部位用某种纯色涂掉,这样,程序在开始时,一运算,把纯色部分去掉,就成了不规则窗体了。
实际上,只要通过一定的运算,把某些纯色的部分通过正/反(恕我无知,只能用这个词来形容了)运算,把与某些值相同的,或者与系统相同的像素去掉,就OK了。
大部分网游启动时的不规则窗体都是这样弄的,先做好一幅规则的画,再把不要的部位用某种纯色涂掉,这样,程序在开始时,一运算,把纯色部分去掉,就成了不规则窗体了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询