Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226534
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-04-02 00:57:47

一、窗口:
顶层窗口:Wx::Frame,Wx::Dialog。只有顶层窗口创建的时候才可以使用undef作为其父窗口。其它窗口都必须在构造函数中传入一个非空的父窗口。
Wx::Frame一个可以包含其他窗口,大小可变的窗口
Wx::Dialog是可变大小的用于给用户提供选项的窗口
二、容器:
Wx::Panel为其他窗口提供布局的窗口
Wx::Notebook可以用TAB页面进行切换的窗口
Wx::ScrollerWindow可以有滚动条的窗口
三、控件窗口
如Wx::Button等
四、静态控件
Wx::StaticText文字标签控件
Wx::StaticLine显示静态的一行
Wx::StaticBitmap显示静态图片
Wx::StaticBox用来在其它控件周围显示一个静态的方框
五、菜单
Wx::Menu
六、控件条
Wx::Menu::Bar菜单条,位于Wx::Frame上
Wx::ToolBar工具条
七、布局
7.1Wx::BoxSizer可以将控件进行横向或纵向排列。如果采用横向排列,则子控件在纵向上可指定居中,顶部对齐,底部对齐。如果采用纵向排列,可指定居中,左对齐、右对齐。
$self=Wx::Frame->new(),$self->SetSizer($sr)与顶层窗口绑定,现在可以在这个顶层布局控件中放置窗口或其它控件;$sr =Wx::BoxSizer->new(),$sr->Fit以顶层窗口指针为参数,以使顶层窗口大小适合所有控件所需大小。$sr->SetSizeHints以顶层窗口指针为参数,以使顶层窗口在以后执行过程中尺寸永远不小于初始尺寸;
直接用$self->SetSizerAndFit可以达到以上三个同样效果,即依次调用上面三个函数。
用Add可以加一个额外的行、列间距。
  1. use Wx;

  2. package MyFrame;
  3. use base qw(Wx::Frame);
  4. use Wx qw(:sizer wxDefaultPosition wxDefaultSize);

  5. use Wx::Event qw(EVT_BUTTON );
  6. our @id = ( 0 .. 5 ); # IDs array

  7. ########################### <<CODE ############################
  8. sub new {
  9.     my $ref = shift;
  10.     my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
  11.     my $sr = Wx::BoxSizer->new(wxVERTICAL);
  12.     $sr->Add( Wx::Button->new( $self, $id[0], 'button 1' ), 1, wxALL, 5 );
  13.     $sr->Add( 10, 10, 0, wxGROW );#增加行间距
  14.     $sr->Add( Wx::Button->new( $self, $id[1], 'button 2' ), 1, wxGROW | wxALL, 5 );

  15.     $self->SetSizer($sr);
  16.     $sr->Fit($self);
  17.     $sr->SetSizeHints($self);
  18.     #与前三行效果相同
  19.     #$self->SetSizerAndFit($sr);

  20.     EVT_BUTTON( $self, $id[0], sub{} );
  21.     return $self;
  22. }
  23. ########################### CODE END ############################

  24. package MyApp;
  25. use base 'Wx::App';

  26. sub OnInit {
  27.     my $self = shift;
  28.     my $frame = MyFrame->new;
  29.     $frame->Show(1);
  30.     $self->SetTopWindow($frame);
  31.     return 1;
  32. }

  33. package main;

  34. MyApp->new->MainLoop;
7.2Wx::StaticBoxSizer类似Wx::BoxSizer
  1. ########################### <<CODE ############################
  2. sub new {
  3.     my $ref = shift;
  4.     my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
  5.     my $nsz =
  6.       Wx::StaticBoxSizer->new(
  7.         Wx::StaticBox->new( $self, -1, 'Wx::StaticBoxSizer' ), wxVERTICAL );
  8.     $nsz->Add( Wx::Button->new( $self, $id[2], 'button 3' ),
  9.         1, wxALL, 5 );
  10.     $nsz->Add( 10, 10, 0, wxGROW );#增加行间距
  11.     $nsz->Add( Wx::Button->new( $self, $id[3], 'button 4' ),
  12.         1, wxGROW | wxALL, 5 );

  13.     $self->SetSizer($nsz);
  14.     $nsz->Fit($self);
  15.     $nsz->SetSizeHints($self);
  16.     #与前三行效果相同
  17.     #$self->SetSizerAndFit($nsz);

  18.     EVT_BUTTON( $self, $id[2], sub{} );
  19.     return $self;
  20. }
  21. ########################### CODE END ############################

7.3Wx::GridSizer可以以二维的方式排列子控件,且二维表的每个单元格大小相同,用Add可以加一个额外的行、列间距。

  1. ########################### <<CODE ############################
  2. sub new {
  3.     my $ref = shift;
  4.     my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
  5.     my $tsz = Wx::GridSizer->new( 3, 3, 1, 1, );
  6.     for my $i ( 1 .. 9 ) {
  7.       $tsz->Add( Wx::Button->new( $self, "$id[$i-1]", "Button $i" ),
  8.                0, wxALL, 5);
  9.     }
  10.     $self->SetAutoLayout( 1 );
  11.     $self->SetSizerAndFit($tsz);

  12.     EVT_BUTTON( $self, $id[0], sub{} );
  13.     return $self;
  14. }
  15. ########################### CODE END ############################
7.4Wx::GridBagSizer将子控件按虚拟的网格进行排列,子控件位置通过Wx::GBPosition->new()指定,大小通过Wx::GBSpan->new()指定,对象的大小可不限于一个网格
  1. ########################### <<CODE ############################
  2. sub new {
  3.     my $ref = shift;
  4.     my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
  5.     my $gbr = Wx::GridBagSizer->new();

  6.     $gbr->Add( Wx::Button->new( $self, $id[0], 'button 1' ),Wx::GBPosition->new(0,0));
  7.     #指定button 2大小为两单元格
  8.     $gbr->Add( Wx::Button->new( $self, $id[1], 'button 2' ),Wx::GBPosition->new(2,2),Wx::GBSpan->new(1,2),wxGROW);
  9.     $gbr->Add( Wx::Button->new( $self, $id[2], 'button 3' ),Wx::GBPosition->new(3,2) );
  10.     $gbr->Add( Wx::Button->new( $self, $id[3], 'button 4' ),Wx::GBPosition->new(3,3));
  11.     $gbr->AddGrowableRow(3);#第三行大小可变
  12.     $gbr->AddGrowableCol(2);#第二列大小可变
  13.     $self->SetSizerAndFit($gbr);

  14.     EVT_BUTTON( $self, $id[0], sub{} );
  15.     return $self;
  16. }
  17. ########################### CODE END ############################
另外Wx::Perl::Dialog这个模块对布局也很有用,例子的话直接看CPAN的例子就行了。
阅读(2066) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~