use strict; use warnings; use Wx; package MyApp; use base 'Wx::App'; sub OnInit { my $frame = Wx::Frame->new( undef, -1, 'A Clickable Label', ); my $label = Wx::StaticText->new( $frame, -1, "Click here to exit", ); my $sizer = Wx::BoxSizer->new( Wx::wxVERTICAL() ); $frame->SetSizer($sizer); $sizer->Add($label); $sizer->Add( Wx::Button->new( $frame, -1, "Click here to exit $_", ) ) for 1 .. 3; Wx::Event::EVT_MOUSE_EVENTS( $_[0], sub { #~ perl -MWx -le "print for sort keys %Wx::MouseEvent:: " my ( $s, $e ) = @_; #~ LeftIsDown MiddleIsDown RightIsDown my $IsDown = join( '|', grep { my $m = $_ . 'IsDown'; eval { $e->$m; } } qw' Left Middle Right ' ); $IsDown = sprintf 'IsDown< %s >', $IsDown if length $IsDown; #~ AltDown ButtonDown CmdDown ControlDown LeftDown MetaDown MiddleDown RightDown ShiftDown my $Down = join( '|', grep { my $m = $_ . 'Down'; $e->$m; } qw' Alt Button Cmd Control Left Meta Middle Right Shift ' ); $Down = sprintf 'Down< %s >', $Down if length $Down; #~ ButtonDClick LeftDClick MiddleDClick RightDClick my $DClick = join( '|', grep { my $m = $_ . 'DClick'; $e->$m; } qw' Button Left Middle Right ' ); $DClick = sprintf 'DClick< %s >', $DClick if length $DClick; #~ IsButton IsPageScroll my $Is = join( '|', grep { my $m = 'Is' . $_; $e->$m; } qw' Button PageScroll ' ); $Is = sprintf 'Is< %s >', $Is if length $Is; my $Bool = join( '|', grep { my $m = $_; $e->$m; } qw' Button Dragging Entering Leaving Moving ' ); $Bool = sprintf '< %s >', $Bool if length $Bool; #~ GetButton GetLinesPerAction GetLogicalPosition GetPosition GetPositionXY GetWheelDelta GetWheelRotation GetX GetY my $Get = sprintf "Get< %s >", join( '|', map { my $m = 'Get' . $_; sprintf '%s( %s )', $_, $e->$m; } qw' Button LinesPerAction ', #~ LogicalPosition #~ Usage: Wx::MouseEvent::GetLogicalPosition(THIS, dc) #~ Position PositionXY #~ X Y qw' WheelDelta WheelRotation ' ); my $GetEvent = $e->GetEventType; $GetEvent = TypeIntToStr($GetEvent) . "($GetEvent) " . $e->GetEventObject; my $XY = sprintf "%4d,%4d ", $e->GetPositionXY; print $XY, join ' ', grep length, $Is, $IsDown, $DClick, $Down, $Bool, $Get, $GetEvent, "\n"; $e->Skip; return; } ); $frame->Show; } ## end sub OnInit MyApp->new->MainLoop; BEGIN { my %str2con = map { my $dummy; my $con = Wx::constant( $_, 0, $dummy ); $_ => $con; } grep /^wxEVT_/, keys %Wx::; my %con2str = reverse %str2con; sub TypeIntToStr { $con2str{ +shift } ||'' } } ## end BEGIN __END__ #### 24, 0 < Entering > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_ENTER_WINDOW(10108) Wx::StaticText=HASH(0xa1e2c4) 24, 0 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 24, 1 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 24, 1 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::StaticText=HASH(0xa1e2c4) 24, 1 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::StaticText=HASH(0xa1e2c4) 24, 1 Is< Button > IsDown< Left > DClick< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10110) Wx::StaticText=HASH(0xa1e2c4) 24, 1 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::StaticText=HASH(0xa1e2c4) 24, 2 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 23, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 22, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 22, 4 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 22, 5 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 7 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 8 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 9 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 10 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 11 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 12 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::StaticText=HASH(0xa1e2c4) 21, 0 < Entering > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_ENTER_WINDOW(10108) Wx::Button=HASH(0xda0a14) 21, 0 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 13 < Leaving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_LEAVE_WINDOW(10109) Wx::StaticText=HASH(0xa1e2c4) 21, 1 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 2 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda0a14) 21, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > IsDown< Left > DClick< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10110) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda0a14) 21, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda0a14) 21, 3 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda0a14) 21, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 5 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 8 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 9 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 10 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 11 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 13 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 14 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 16 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 18 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 19 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 21, 22 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a14) 22, 0 < Entering > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_ENTER_WINDOW(10108) Wx::Button=HASH(0xda0a04) 22, 0 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 23 < Leaving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_LEAVE_WINDOW(10109) Wx::Button=HASH(0xda0a14) 22, 1 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 2 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 2 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda0a04) 22, 2 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda0a04) 22, 2 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 2 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda0a04) 22, 2 Is< Button > IsDown< Left > DClick< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10110) Wx::Button=HASH(0xda0a04) 22, 2 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda0a04) 22, 2 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 4 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 21, 5 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 21, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 21, 8 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 21, 10 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 21, 12 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 21, 14 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 22, 17 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 23, 19 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 24, 21 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 25, 22 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda0a04) 25, 0 < Entering > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_ENTER_WINDOW(10108) Wx::Button=HASH(0xda09c4) 25, 0 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 25, 23 < Leaving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_LEAVE_WINDOW(10109) Wx::Button=HASH(0xda0a04) 25, 2 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 25, 3 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 26, 4 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 26, 5 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 26, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 26, 7 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 27, 8 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 27, 8 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda09c4) 27, 8 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda09c4) 27, 8 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 27, 8 Is< Button > IsDown< Left > Down< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10101) Wx::Button=HASH(0xda09c4) 27, 8 Is< Button > IsDown< Left > DClick< Button|Left > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10110) Wx::Button=HASH(0xda09c4) 27, 8 Is< Button > < Button > Get< Button( 1 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > (10102) Wx::Button=HASH(0xda09c4) 27, 8 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 27, 7 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 26, 7 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 26, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 25, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4) 24, 6 < Moving > Get< Button( 0 )|LinesPerAction( 0 )|WheelDelta( 0 )|WheelRotation( 0 ) > wxEVT_MOTION(10107) Wx::Button=HASH(0xda09c4)