我有一個包含帶有ListBox和Panel的BoxSizer的Frame。我想以編程方式調整面板大小,然後強制框架調整大小。我可以調整面板的大小,但是如何強制BoxSizer或Frame調整大小?在調整子面板大小後強制調整Wx大小窗口
#!/usr/bin/perl
use strict;
use warnings;
use Wx;
package TestApp;
use base qw (Wx::App);
use Wx qw (wxMINIMIZE_BOX wxSYSTEM_MENU wxCAPTION wxCLOSE_BOX wxCLIP_CHILDREN);
sub OnInit {
my $self = shift;
my $frame = TestFrame->new (
undef,
-1,
'Test App',
[-1, -1],
[-1, -1],
wxMINIMIZE_BOX | wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN
);
$frame->Show (1);
$self->SetTopWindow ($frame);
return 1;
}
package TestFrame;
use base qw (Wx::Frame);
use Wx::Event qw (EVT_MENU);
use Wx qw (wxHORIZONTAL wxEXPAND wxALL wxBORDER_SIMPLE);
our @id = (0 .. 100);
sub new {
my $class = shift;
my $self = $class->SUPER::new (@_);
my $boxsizer = Wx::BoxSizer->new (wxHORIZONTAL);
my $listbox = Wx::ListBox->new (
$self,
-1,
[-1, -1],
[64, -1]
);
my $panel = Wx::Panel->new (
$self,
-1,
[-1, -1],
[-1, -1],
wxBORDER_SIMPLE
);
$boxsizer->Add (
$listbox,
0,
wxEXPAND | wxALL,
5
);
$boxsizer->Add (
$panel,
0,
wxALL,
5
);
my $menubar = Wx::MenuBar->new();
my $menu = Wx::Menu->new();
$menu->Append ($id[0], "Small Panel");
$menu->Append ($id[1], "Large Panel");
$menubar->Append ($menu, 'File');
$self->SetMenuBar ($menubar);
$panel->SetClientSize (100, 200);
$self->SetSizerAndFit ($boxsizer);
EVT_MENU ($self, $id[0], sub {
$panel->SetMinSize ([-1, -1]);
$panel->SetClientSize ([100, 200]);
$panel->SetMinSize ($panel->GetClientSize());
$self->SetClientSize ($boxsizer->GetSize());
$self->Fit();
});
EVT_MENU ($self, $id[1], sub {
$panel->SetMinSize ([-1, -1]);
$panel->SetClientSize ([200, 300]);
$panel->SetMinSize ($panel->GetClientSize());
$self->SetClientSize ($boxsizer->GetSize());
$self->Fit();
});
return $self;
}
package main;
my ($app) = TestApp->new();
$app->MainLoop();
我已經改變了問題以提供一個完整的示例 –