#!/usr/bin/perl use warnings; use Wx 0.15 qw[:everything]; package MyApp; use strict; use vars qw( @ISA ); @ISA = qw( Wx::App ); sub OnInit { my $self = shift; my ($frame) = MyFrame->new("Dungeon Construction Kit", [50,50], [450,350]); $frame->{app} = $self; # the app instance, so we can Yield to GUI $self->SetTopWindow($frame); $frame->Show( 1 ); 1; } package MyFrame; #use strict; use vars qw( @ISA ); use Wx qw[:everything]; ##ADDED @ISA = qw( Wx::Frame ); sub new { my $class = shift; my ($title, $pts, $size) = @_; my $self = $class->SUPER::new( undef, -1, $title, Wx::Point->new(@$pts), Wx::Size->new(@$size), ); # create the menus my $menubar = Wx::MenuBar->new(); my $file_menu = Wx::Menu->new; my ($ID_MAKE_PANEL, $ID_HIDE_PANEL, $ID_EXIT) = 1 .. 1000; $file_menu->Append($ID_MAKE_PANEL, "&New\tCtrl+N", "Create a new panel"); $file_menu->Append($ID_EXIT, "E&xit\tCtrl+X", "Quit"); $menubar->Append($file_menu, "&File"); $self->SetMenuBar($menubar); use Wx::Event qw( EVT_MENU ); # put sizer for panel into the frame $self->{topsizer} = Wx::BoxSizer->new(wxEXPAND); $self->SetSizer($self->{topsizer}); EVT_MENU($self, $ID_MAKE_PANEL, \&MyFrame::showpan); EVT_MENU($self, $ID_EXIT, sub { $self->Close(1) }); $self; } sub showpan { my $self = shift; # Make a panel with a text control so we can see it. $self->{text} = Wx::TextCtrl->new($self,-1,"Test",wxDefaultPosition,wxDefaultSize) unless $self->{text}; $self->{textsizer} = Wx::BoxSizer->new(wxVERTICAL) unless $self->{textsizer}; $self->{textsizer}->Add($self->{text},1,wxLEFT,2); $self->{panel} = Wx::Panel->new($self) unless $self->{panel}; $self->{panel}->SetSizer($self->{textsizer}); # attach text sizer to panel # Add panel to frame's sizer $self->{topsizer}->Add($self->{panel},1,wxEXPAND|wxALL,2); $self->{topsizer}->Layout; $self->{panel}->Show(0); } package main; MyApp->new->MainLoop();