use wxPerl::Constructors后,wxPerl::Constructors::doc(Cpan上的文档)列表中的控件通过新的使用规则可以省略一个个模块的导入,使用参数的定义。主要可省略以下代码:
- use base qw(Wx::Frame Wx::Panel Wx::**);
- use Wx qw( wxDefaultPosition wxDefaultSize wxID_EXIT wxTOP wxGROW ...);
- use Wx::Event qw(EVT_MENU EVT_BUTTON ...);
使用规则:
- 使用模块时:s/Wx::([^-]*-)/wxPerl::$1-/g。如Wx::Frame改写为wxPerl::Frame
- 使用参数时:“原参数”加前缀&Wx::。如wxDefaultSize改写为&Wx::wxDefaultSize
- 使用Wx::Event时:“Event”加前缀Wx::Event::。如EVT_BUTTON改写为Wx::Event::EVT_BUTTON。
示例:使用wxPerl::Constructors
- use Wx;
- use wxPerl::Constructors;
- package MyApp;
- use base 'Wx::App';
- sub OnInit {
- my $self = shift;
- #s/Wx::([^-]*-)/wxPerl::$1-/g如Wx::Framer替换写为wxPerl::Frame
- my $frame = wxPerl::Frame->new(undef, 'A wxPerl Application');
- $frame->SetMinSize([120,80]);
- #参数wxDefaultSize替换加前缀&Wx::
- my $panel = wxPerl::Panel->new( $frame, -1,&Wx::wxDefaultSize);
- my $button =wxPerl::Button->new( $panel,'Click me!');
- #使用wxPerl::Constructors后的,用SetSize改变控件大小。
- $button->SetSize([60,25]);
- #Event替换加前缀Wx::Event::
- Wx::Event::EVT_BUTTON( $button, -1, \&ShowDialog );
- $frame->Show;
- }
- MyApp->new->MainLoop;
- ### PUT SUBROUTINES HERE ###
- sub ShowDialog {
- my ( $self, $event ) = @_;
- Wx::MessageBox(
- "This is a dialog",
- "Wx::MessageBox example",
- wxOK | wxCENTRE, $self
- );
- }
未使用wxPerl::Constructors时:
- use Wx;
- package MyFrame;
- use base qw(Wx::Frame Wx::Panel);
- use Wx qw( wxDefaultPosition wxDefaultSize);
- use Wx::Event qw(EVT_BUTTON );
- sub new {
- my $ref = shift;
- my $self = $ref->SUPER::new(undef,-1, 'A wxPerl Application',wxDefaultPosition);
-
- my $panel = Wx::Panel->new( $self, -1, wxDefaultPosition, wxDefaultSize);
- my $button =
- Wx::Button->new( $panel, -1, 'Click me!', wxDefaultPosition, [60,25]);
- EVT_BUTTON( $button, -1, \&ShowDialog );
-
- return $self;
- }
- ### PUT SUBROUTINES HERE ###
- sub ShowDialog {
- my ( $self, $event ) = @_;
- Wx::MessageBox(
- "This is a dialog",
- "Wx::MessageBox example",
- wxOK | wxCENTRE, $self
- );
- }
- package MyApp;
- use base 'Wx::App';
- sub OnInit {
- my $self = shift;
- my $frame = MyFrame->new;
- $frame->SetMinSize([120,80]);
- $frame->Show;
- return 1;
- }
- package main;
- MyApp->new->MainLoop;
阅读(2308) | 评论(1) | 转发(0) |