VB无所不能之四:制作透明和半透明窗体
——作者:钟声
我们经常可以看到这样的窗体,觉得很炫,如图所示:
同样,对Windows系统方面的编程似乎首先想到的绝对不是VB,而大部分程序员想到的一定是VC。
其实,VB对于这个实现非常方便且简单,用到了“user32”中的SetLayeredWindowAttributes()函数。
SetLayeredWindowAttributes()函数介绍:
函数声明:
Declare Function SetLayeredWindowAttributes Lib "user32" () Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
hwnd是透明窗体的句柄,
crKey为颜色值,
bAlpha是透明度,取值范围是[0,255],
dwFlags是透明方式,可以取两个值:当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。
下面我们做两个实验:
第一个:做一个半透明窗体
步骤一:打开VB建立一个窗体Form
步骤二:将窗体背景颜色设为:&HFF0000
步骤三:将下面代码粘贴到程序中:
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" () Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" () Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetLayeredWindowAttributes Lib "user32" () 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
Const GWL_EXSTYLE = () Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1
Sub Form_Load() 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, 100, LWA_ALPHA
End Sub
运行结果如下:
第一个:做一个异型窗体
在之前的窗体上放置一个图片如图所示:
将下面代码粘贴到程序中:
GetWindowLong Lib "user32" Alias "GetWindowLongA" () GetWindowLong Lib "user32" Alias "GetWindowLongA" ( GetWindowLong Lib "user32" Alias "GetWindowLongA" () GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
SetWindowLong Lib "user32" Alias "SetWindowLongA" () SetWindowLong Lib "user32" Alias "SetWindowLongA" ( SetWindowLong Lib "user32" Alias "SetWindowLongA" () SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
SetLayeredWindowAttributes Lib "user32" () SetLayeredWindowAttributes Lib "user32" ( SetLayeredWindowAttributes Lib "user32" () 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
Const GWL_EXSTYLE = () Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1
Sub Form_Load() Sub Form_Load()
Dim rtn As Long
BorderStyler = 0
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, &HFF0000, 0, LWA_COLORKEY'将扣去窗口中的蓝色
End Sub
运行结果如下所示:
分享到:
相关推荐
vb制作半透明窗口,怎样制作vb的半透明窗口,含代码和窗体文件
VB 透明窗体 VB 透明窗体 VB 透明窗体 VB 透明窗体
计算机编程,学习交流 vb实现窗体半透明(源码)
半透明窗体(窗体对鼠标点击有反应): Option Explicit 'Transparancy API's Private Dec...... ..... 半透明窗体(对鼠标点击无反应): Option Explicit Private Dec...... ...... 还有种类似的"窗体" 可以隔着它...
半透明窗体为你的vb程序增色不少,调试通过。
vb的透明窗体vb的透明窗体vb的透明窗体vb的透明窗体vb的透明窗体
vb透明窗体特效源码 透明窗体透明窗体透明窗体
用vb6实现透明窗体,适合vb6开发,效果很好
1.一种是设置窗体属性,很简单,但是透明后,可以接触到窗口矩形区域下面的地方,比如有一个文件,可以直接双击打开,可以说操作是不透明的。把窗口想象成木框+玻璃,这种方法相当于只有木框,没玻璃。当然,控件还...
摘要:VB源码,界面编程,窗体特效 VB窗体特效:喷枪窗体源代码,采用计时器控件的Timer事件,如果按下鼠标左键,计时器开始使用。点一次鼠标,即可在窗体上喷出点状物,值得借鉴。
在@浓情咖啡的基础上修改,增加了半透明png图片逐渐消失功能。窗体2是一个非矩形窗体,制作了简易
动态半透明窗体 绝对可行 不是本人编写 只是参照
VB中利用API函数制作的半透明窗体源代码
2、通过调用接口函数“TransparentForm”,可以根据指定的透明度(0-255)将窗体进行半透明处理。 有此模块后,你可以轻松搞定透明和半透明功能。因为是调用的API函数,你可以把此功能转化成VC的代码,在VC工程中也...
VB 另窗体透明,亲测可用,谢谢
看了好多都不能同时实现透明窗体加载透明png的 因为vb很老了= =当时还不png还不是主流 所以vb不支持 送大家个福利、给分就成、评论返还的大家记得评论
VB无所不能系列收集于网络,全文共7部分,包含原码。 主要内容: 1、指针 2、图像格式转换 3、获取消息钩子 4、透明和半透明窗体 5、创建标准DLL 6、监控运行程序 7、多线程
VB初级窗体设计实例:简单窗体和按钮源码,并为按钮增加了鼠标响应脚本,当鼠标移上按钮和滑过按钮以及点击按钮时,都有不同的变化,通过本例让VB初学者学习一下按钮事件的添加、鼠标事件的判断等。
VB.Net程序设计:制作自己的分隔线控件(LineH、LineV)水平分隔线 LineH.vb,垂直分隔线 LineV.vb的完整代码 http://blog.csdn.net/linjimu/archive/2006/08/15/1065745.aspx
VB透明窗体制作例子,透明度在代码中可自定义,可完全透明,也可不透明,也就是变成常规窗体,采用了API函数,无第三方函数,在VB6.0环境下可直接对源代码编译运行。窗口透明效果请参见源码测试截图。