Dude, Those ROCK!!!!   Thanks for taking the time to play with and come up with these.  Maybe they will get into the next version.   Keep sending new ones when you find them.
 

Joe Frazier, Jr.
Technical Support Engineer
Peopleclick Service Support

Tel:  +1-800-841-2365
E-Mail: mailto:support@peopleclick.com

-----Original Message-----
From: Luigino Masarati [mailto:lmasarati@outsys.it]
Sent: Thursday, October 03, 2002 8:18 AM
To: perl-win32-gui-users@lists.sourceforge.net
Subject: [perl-win32-gui-users] Animated windows

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=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/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...
 
use Win32;
use Win32::API;
 
use constant AW_HOR_POSITIVE => 0x00000001;
use constant AW_HOR_NEGATIVE => 0x00000002;
use constant AW_VER_POSITIVE => 0x00000004;
use constant AW_VER_NEGATIVE => 0x00000008;
use constant AW_CENTER       => 0x00000010;
use constant AW_HIDE         => 0x00010000;
use constant AW_ACTIVATE     => 0x00020000;
use constant AW_SLIDE        => 0x00040000;
use constant AW_BLEND        => 0x00080000;
 
# BOOL AnimateWindow(
# HWND hwnd,
# DWORD dwTime,
# DWORD dwFlags
# );
my $AnimateWindow = new Win32::API("user32", "AnimateWindow", [ 'N', 'N', 'N' ], 'N') or $reg{'UI'}{'Fading'} = 0;
 
# ... here create your window object ($winObj) as ususal...
 
# set animation duration in ms (usually 200ms)
my $msec = 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.