Hi,
I searched in this mailing list how to create animated windows like =
start menu in W2K/XP (see Win32 SDK - Layered Windows =
http://msdn.microsoft.com/library/default.asp?url=3D/library/en-us/winui/=
winui/windowsuserinterface/windowing/windows/windowreference/windowfuncti=
ons/animatewindow.asp) and found nothing about it, so i searched on MSDN =
and found the API code and tried until i got it.
Note that this functionality is fully supported by Windows 98/2000/XP =
only.
Here is the code, hope it will be useful to someone else...
#-----------------------------
# use Win32::GUI etc...=20
use Win32;
use Win32::API;
use constant AW_HOR_POSITIVE =3D> 0x00000001;
use constant AW_HOR_NEGATIVE =3D> 0x00000002;
use constant AW_VER_POSITIVE =3D> 0x00000004;
use constant AW_VER_NEGATIVE =3D> 0x00000008;
use constant AW_CENTER =3D> 0x00000010;
use constant AW_HIDE =3D> 0x00010000;
use constant AW_ACTIVATE =3D> 0x00020000;
use constant AW_SLIDE =3D> 0x00040000;
use constant AW_BLEND =3D> 0x00080000;
# BOOL AnimateWindow(
# HWND hwnd,
# DWORD dwTime,
# DWORD dwFlags
# );
my $AnimateWindow =3D new Win32::API("user32", "AnimateWindow", [ 'N', =
'N', 'N' ], 'N') or $reg{'UI'}{'Fading'} =3D 0;
# ... here create your window object ($winObj) as ususal...
# set animation duration in ms (usually 200ms)
my $msec =3D 200;
# FADE IN
# use this command in place of $objWin->Show()
$AnimateWindow->Call($winObj->{-handle}, $msec, AW_ACTIVATE | AW_BLEND =
);
# FADE OUT
# use this command in place of $objWin->Hide() for example in =
winObj_Terminate()
$AnimateWindow->Call($winObj->{-handle}, $msec, AW_HIDE | AW_BLEND );
# Some alternatives follows...
# APPEAR from LEFT-TOP
# use this command in place of $objWin->Show()
# $AnimateWindow->Call($winObj->{-handle}, $msec, AW_ACTIVATE | AW_SLIDE =
| AW_HOR_POSITIVE | AW_VER_POSITIVE );
# DISAPPEAR from RIGHT-BOTTOM
# use this command in place of $objWin->Hide() for example in =
winObj_Terminate()
# $AnimateWindow->Call($winObj->{-handle}, $msec, AW_HIDE | AW_SLIDE | =
AW_HOR_NEGATIVE | AW_VER_NEGATIVE );
# GROW from CENTER
# use this command in place of $objWin->Show()
# $AnimateWindow->Call($winObj->{-handle}, $msec, AW_ACTIVATE | =
AW_CENTER );
# SHRINK to CENTER
# use this command in place of $objWin->Hide() for example in =
winObj_Terminate()
# $AnimateWindow->Call($winObj->{-handle}, $msec, AW_HIDE | AW_CENTER );
#-----------------------------
Bye.
Luigino Masarati
OutSys snc.
|