怎样实现Form1窗体完全透明并且可以播放事先制作好的GIF或ANI动画呢?

RedChimae 码农  2009-11-13 11:08:36
我的开发工具是VB6.0,现在想制作一个能在屏幕上运动的小动物的程序,就像一些办公软件帮助里面代的帮助助手那样的。我的想法是将Form1窗体完全透明,然后在运行时加载一个外部事先制作好的GIF或ANI动画文件,因为GIF和ANI都能实现背景透明。可是现在我遇到了难题,就是当我用API函数SetLayeredWindowAttributes、GetWindowLong和SetWindowLong将窗体Form1完全变透明后,这个窗体就像从屏幕上完全消失了一样,窗体本身的所有鼠标事件也不起作用了,窗体上面的控件也看不到了。请问,要是这样的话,我还怎么让它加载外部GIF或ANI动画文件呢?
...全文
93 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xyd_one 2009-11-17
good idear
回复
孤独剑_LPZ 2009-11-13
看来我理解lz的意思有偏差
回复
舉杯邀明月 2009-11-13
路过顶贴.............
回复
贝隆 2009-11-13
帮顶
回复
cBirdNO1NO1 2009-11-13
对的,屏蔽一种颜色即可。注意:SetLayeredWindowAttributes函数可以同时设置透明度屏蔽颜色。如:
SetLayeredWindowAttributes hWnd, VbRed, 100, 3
作用:屏蔽红色,同时透明值为100
回复
RedChimae 2009-11-13
我找到方法了,具体如以下代码:

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 LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1
Private Const GWL_EXSTYLE = (-20)

Private Sub Form_Load()
Dim rtn As Long

frmMain.BackColor = RGB(255, 255, 255)
frmMain.BorderStyle = 0
frmMain.Picture = LoadPicture(App.Path & "\Test.gif")

rtn = GetWindowLong(hWnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hWnd, RGB(255, 255, 255), 100, LWA_COLORKEY
End Sub
回复
孤独剑_LPZ 2009-11-13
用SetWindowLong和SetWindowPos就可以实现窗体透明,但窗体的边框还是可以看到的,点一下上边框,窗体标题栏和控件就会显示.
GIF或ANI动画文件,可以用播放控件加timer完成并控制,只要fileName属性不为空就会循环播放,不需要用按钮控制吧
回复
相关推荐
发帖
API
创建于2007-09-28

1464

社区成员

VB API
申请成为版主
帖子事件
创建了帖子
2009-11-13 11:08
社区公告
暂无公告