调整儿童面板大小后,在WX中调整大小的力窗口

  • 本文关键字:调整 WX 窗口 wxwidgets wxperl
  • 更新时间 :
  • 英文 :


我有一个框架,其中包含一个带有列表框和面板的拳击箱。我想编程调整面板大小,然后强迫框架调整大小。我可以在下面的面板大小调整面板大小,但是如何强制拳击调整或框架调整大小?

下面的示例代码使用调整面板大小的调整菜单选项创建一个应用程序:

#!/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 ();

呼叫$self->Fit()会这样做,只要您致电$panel->SetMinSize()而不是SetClientSize()

相关内容

  • 没有找到相关文章