I've been using this code with great success on Windows2000. (Really adds a
professional touch to the GUI!).

Now I've added a menu button to my window I get a greyed out background on
my TextField boxes. I've tried to update the box's colour but only seem to
be able to update the background of the actual text not the whole box. Any
ideas?

Rob Brewster.



# Menu options for GUI
#=======================================
$menu = Win32::GUI::MakeMenu(
    "&Help"   => "Help",
    " > -"       => 0,
    " > E&xit"   => "Exit",
    );

#===========================================================================
====
# Creates the objects and labels for the GUI window 1
#
#===========================================================================
====
sub create_window1 {
   # Create window
   $window = new Win32::GUI::Window(-menu => $menu,
                                    -title => "Test",
                                    -pos => [ 100, 100 ],
                                    -size => [ 500, 400 ],
                                    -minsize => [ 500, 400],
                                    -name => "Window",
                                    );
   
   $number= $window->AddTextfield (-text  => "(Enter No.)",
                                   -name => "Number",
                                   -left => 145,
                                   -top => 40,
                                   -height => 20,
                                   -width => 100,
                                   );

}


sub Window_Terminate {
    return -1;
}

# Main function
#===============================
create_window1();

$msec = 200;
$AnimateWindow->Call($window->{-handle}, $msec, AW_ACTIVATE | AW_CENTER);

Win32::GUI::Dialog();






-----Original Message-----
From: Luigino Masarati [mailto:[EMAIL PROTECTED]
Sent: 03 October 2002 13:18
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/anim
atewindow.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.

Reply via email to