当前位置:编程学习 > VB >>

关于VB制作窗体透明渐变的问题...

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 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 Sub Timer1_Timer()
Dim rtn As Long
rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes Me.hwnd, 0, a, LWA_ALPHA
Do Until a = 255
a = a + 15
Loop
End Sub
这样在Form_Load事件中能用。但是等关闭窗体进入Unload事件中。窗体就不是渐变的了。就会开始闪(Cancel设为1了)。怎么回事的?
答案:其实楼主您的Api功底不怎么扎实啊

SetLayeredWindowAttributes Me.hwnd, 0, a, LWA_ALPHA
Do Until a = 255
a = a + 15
Loop

虽然我并不学VB 但是这段代码我也算是看的懂

也就是出来的时候渐变显示出来

退出的时候渐变关闭界面

其实楼主可以调用AnimateWindow这个函数

在销毁的时候调用如下的格式

invoke AnimateWindow,hWnd,2000, AW_HIDE or  AW_BLEND

在创建完毕的时候调用如下

invoke AnimateWindow,hWnd,2000, AW_BLEND

有兴趣楼主可以试试应该能满足楼主想要的效果

下面复制一下百度中的介绍:

 

AnimateWindow   

函数功能:该函数能在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果:滚动动画和滑动动画。   

函数原型:BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags);   

参数:   

hWnd:指定产生动画的窗口的句柄。   

dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。   

dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。

标志描述:   

AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。   

AW_ACTIVE:激活窗口。在使用了AW_HIDE标志后不要使用这个标志。   

AW_BLEND:使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。   

AW_HIDE:隐藏窗口,缺省则显示窗口。   

AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。   

AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。   

AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。   

AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。   

AW_HOR_NEGATIVE:自右向左显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。   

返回值

如果函数成功,返回值为非零;如果函数失败,返回值为零。

在下列情况下函数将失败:   

窗口使用了窗口边界;

窗口已经可见仍要显示窗口;

窗口已经隐藏仍要隐藏窗口。

若想获得更多错误信息,请调用GetLastError函数。   

备注:

可以将AW_HOR_POSITIVE或AW_HOR_NEGTVE与AW_VER_POSITVE或AW_VER_NEGATIVE组合来激活一个窗口。   

可能需要在该窗口的窗口过程和它的子窗口的窗口过程中处理WM_PRINT或WM_PRINTCLIENT消息。对话框,控制,及共用控制已处理WM_PRINTCLIENT消息,缺省窗口过程也已处理WM_PRINT消息。   速查:WIDdOWS NT:5.0以上版本:Windows:98以上版本;Windows CE:不支持;头文件:Winuser.h;库文件:user32.lib。

上一个:vb中的rnd函数怎么用??
下一个:vb中单击命令按钮触发哪些事件

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,