The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
#############################################################################
## Name:        samples/hello/hello.pl
## Purpose:     Hello wxPerl sample
## Author:      Mattia Barbon
## Modified by:
## Created:     02/11/2000
## RCS-ID:      $Id: hello.pl 2057 2007-06-18 23:03:00Z mbarbon $
## Copyright:   (c) 2000, 2004, 2006 Mattia Barbon
## Licence:     This program is free software; you can redistribute it and/or
##              modify it under the same terms as Perl itself
#############################################################################

use Wx;

package MyFrame;

use strict;
use base qw(Wx::Frame);

use Wx::Event qw(EVT_PAINT);
# this imports some constants
use Wx qw(wxDECORATIVE wxNORMAL wxBOLD);
use Wx qw(wxDefaultPosition);
use Wx qw(wxWHITE);

sub new {
    my( $class ) = @_;
    # new frame with no parent, id -1, title 'Hello, world!'
    # default position and size 350, 100
    my $this = $class->SUPER::new( undef, -1, 'Hello, world!',
                                   wxDefaultPosition , [350, 100] );

    # create a new font object and store it
    $this->{font} = Wx::Font->new( 40, wxDECORATIVE, wxNORMAL, wxBOLD, 0 );
    # set background colour
    $this->SetBackgroundColour( wxWHITE );

    $this->SetIcon( Wx::GetWxPerlIcon() );

    # declare that all paint events will be handled with the OnPaint method
    EVT_PAINT( $this, \&OnPaint );

    return $this;
}

sub OnPaint {
    my( $this, $event ) = @_;
    # create a device context (DC) used for drawing
    my $dc = Wx::PaintDC->new( $this );

    # select the font
    $dc->SetFont( $this->font );
    # draw a friendly message
    $dc->DrawText( 'Hello, world!', 10, 10 );
}

sub font { $_[0]->{font} }

package main;

my $app  = Wx::SimpleApp->new;
my $frame = MyFrame->new;
$frame->Show;
$app->MainLoop;