#! perl -w # # This sample show different event model availlabnle in Win32::GUI # - OEM (Old Event Model) : Call a function evnet based on control name and event name # - NEM (Nem Event Model) : Associate a sub event for a control. # It present how to use both event model for a control. # And event work with custom registered Class. # # NOTE : An event handler should return -1 for stop program, 0 for stop default event processing # and other value for contine default event. # use strict; use warnings; use Win32::GUI qw(BS_NOTIFY); use FindBin(); # Load a cursor bitmap my $C = new Win32::GUI::Bitmap("$FindBin::Dir/harrow.cur", 2); # Register a BUTTON class with cursor my $BC = new Win32::GUI::Class( -name => 'Class_Button', # Class name -extends => 'BUTTON', # Extending Windows BUTTON class -widget => 'Button', # Use button class event loop. -cursor => $C, # Specific cursor for class ); # Create your main window my $Window = new Win32::GUI::Window( -name => "Window", # Window name (important for OEM event) -title => "Win32::GUI test", # Title window -pos => [100,100], # Default position -size => [400,400], # Default size -dialogui => 1, # Enable keyboard navigation like DialogBox ); # Add a fisrt button in main window using default OEM event $Window->AddButton ( -name => "OEM", # Button name (important for OEM event) -pos => [5,5], # Default position -text => "Click button OEM", # Text show on button -addstyle => BS_NOTIFY, # Force notify style for more event -tabstop => 1, # Allow tab navigation ); # Add a second button in main window using NEM event (Automaticly set to NEM by using NEM Event) $Window->AddButton ( -name => "NEM", -pos => [5,35], -text => "Click button NEM", -onClick => sub { print "NEM Click !!!\n";}, # Register some NEN event -onDblClick => sub { print "NEM DblClick !!!\n";}, -onGotFocus => sub { print "NEM GotFocus !!!\n";}, -onLostFocus => sub { print "NEM LostFocus !!!\n";}, -tabstop => 1, # Allow tab navigation ); # Add a third button in main window using both event model (OEM/NEM) $Window->AddButton ( -name => "BOTH", -pos => [5,70], -text => "Click button BOTH", -eventmodel => "both", # Force both event model -onClick => sub { print "BOTH Click using NEM !!!\n"; return 1; }, # Return 1 for permit OEM event call, 0 for ignore it. -tabstop => 1, # Allow tab navigation ); # Add a last button in main window using your class $Window->AddButton ( -name => "CLASS", -pos => [5,105], -text => "Click button Class", -class => $BC, -onClick => sub { print "Class Click !!!\n"; }, -tabstop => 1, # Allow tab navigation ); # Show Main Window $Window->Show(); # Go to event message loooooop.... Win32::GUI::Dialog(); #=========================================================== # Window event #=========================================================== # Terminate Event sub Window_Terminate { return -1; # Stop message loop and finish program } # MouseMove event sub Window_MouseMove { print "Window_MouseMove\n"; } # Activate event sub Window_Activate { print "Window_Activate !!!\n"; return 1; # Continue default processing } # Deactivate event sub Window_Deactivate { print "Window_Deactivate !!!\n"; return 1; # Continue default processing } # Minimize event sub Window_Minimize { print "Window_Minimize !!!\n"; return 1; # Continue default processing or 0 for stop minimize } # Maximise event sub Window_Maximize { print "Window_Maximize !!!\n"; return 1; # Continue default processing or 0 for stop maximize } #=========================================================== # OEM Button event #=========================================================== # Click Event sub OEM_Click { print "OEM_Click !!!\n"; } # DblClick Event sub OEM_DblClick { print "OEM_DblClick !!!\n"; } # GotFocus Event sub OEM_GotFocus { print "OEM_GotFocus !!!\n"; } # LostFocus Event sub OEM_LostFocus { print "OEM_LostFocus !!!\n"; } # MouseMove Event sub OEM_MouseMove { print "OEM_MouseMouve\n"; } # MouseDown Event sub OEM_MouseDown { print "OEM_MouseDown\n"; return 1; # Continue default processing or 0 for stop (don't receive click event) } # MouseUp Event sub OEM_MouseUp { print "OEM_MouseUp\n"; return 1; # Continue default processing or 0 for stop (don't receive click event) } # KeyDown Event sub OEM_KeyDown { print "OEM_KeyDown\n"; return 1; # Continue default processing or 0 for stop (button not push) } # KeyUp Event sub OEM_KeyUp { print "OEM_KeyUp\n"; return 1; # Continue default processing or 0 for stop (button not unpush) } #=========================================================== # BOTH Button event #=========================================================== # Click Event sub BOTH_Click { print "BOTH_Click using OEM !!!\n"; } # MouseMove Event sub BOTH_MouseMove { print "BOTH_MouseMouve using OEM !!!\n"; }