Hi Guys, I have a small piece of code which displays a bitmap, then when you click on the bitmap it should draw a circle round the point you clicked.
It works OK, except that it always returns (0, 0) as the coordinates of the mouse, where-ever you click. Where am I going wrong? Here is the code. Thanks in advance. Regards Steve #!/usr/bin/perl -w -- use Wx 0.15 qw[:allclasses]; use strict; package MyFrame; use Wx qw[:everything]; use base qw(Wx::Frame); use strict; our $gl_self; sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; $style = wxDEFAULT_FRAME_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name ); $self->SetTitle("Drawing on image"); $gl_self= $self; # Set Global variable for use in EVT handler # Image for drawing on $self->{image1} = Wx::Image->new( 'C:set_your_own_bitmap.jpg', wxBITMAP_TYPE_ANY, -1 ); $self->{Loc_Photo_Bmp} = Wx::Bitmap->new( $self->{image1} ) ; $self->{bitmap_1} = my $static_bitmap = Wx::StaticBitmap->new( $self, -1, $self->{Loc_Photo_Bmp}); $self->{bitmap_1}->SetCursor(wxCROSS_CURSOR); # Button to draw image $self->{button_1} = Wx::Button->new($self, -1, "button_1"); use Wx::Event qw(EVT_BUTTON EVT_LEFT_UP EVT_LEFT_DOWN); EVT_LEFT_DOWN( $self->{bitmap_1}, \&on_button ); EVT_LEFT_UP( $self->{bitmap_1}, \&on_button ); # # Sizer # $self->{sizer_1} = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer_1}->Add($self->{bitmap_1}, 0, 0, 0); $self->{sizer_1}->Add($self->{button_1}, 0, 0, 0); $self->SetSizer($self->{sizer_1}); $self->{sizer_1}->Fit($self); $self->Layout(); return $self; } sub on_button{ my ($self, $event) = @_; # select it into a memory dc if (defined $gl_self->{Loc_Photo_Bmp}){ my $mdc = Wx::MemoryDC->new(); $mdc->SelectObject($gl_self->{Loc_Photo_Bmp}); my $pen = Wx::Pen->new( Wx::Colour->new(255,255,255), 10, wxSOLID); $mdc->SetPen( $pen ); $mdc->SetBrush( wxTRANSPARENT_BRUSH ); # Determine mouse event my $m= Wx::MouseEvent->new($event); my $r = 50; my $x=$m->GetX(); my $y=$m->GetY(); # Draw circle round mouse event $mdc->DrawCircle( $x, $y, $r ); $mdc->SelectObject(wxNullBitmap); # deselect the bitmap out of the DC $gl_self->{bitmap_1} ->SetBitmap($gl_self->{Loc_Photo_Bmp}); } $event->Skip() ; return $self; } 1; package main; unless(caller){ local *Wx::App::OnInit = sub{1}; my $app = Wx::App->new(); Wx::InitAllImageHandlers(); my $frame_1 = MyFrame->new(); $app->SetTopWindow($frame_1); $frame_1->Show(1); $app->MainLoop(); }
<<Blank Bkgrd.gif>>