ニュースリーダーアプリケーションを作成していて、ニュースを表示するwxScrolledWindowがあります。ただし、カテゴリがあり、クリックすると、このパネルを現在のカテゴリのニュースで更新したいと思います。wxScrolledWindowでDeleteChildrenを使用してそれを達成しましたが、これはあまり正しく機能していないようです。
問題は、ニュースの再生中に点滅が発生し、ウィンドウ全体を伸ばさないとスクロールバーが表示されないことです。また、このマニュアルを実行しないと、ニュースのサイズ変更が表示されない場合があります。リフレッシュしてみましたが、それでも同じです。ここに私のコード:
our ($self);
sub new {
my ($class, $parent_window) = @_;
$self = $class->SUPER::new($parent_window, -1);
$self->SetScrollRate(10, 10);
my @news = (...);
regenerate_news_list(@news);
return $self;
}
sub regenerate_news_list($) {
my (@news) = @_;
$self->DestroyChildren();
my $vbox = Wx::BoxSizer->new(wxVERTICAL);
for my $news_item (@news) {
my $news_panel = Wx::Panel->new($self, wxID_ANY);
my $news_sizer = Wx::BoxSizer->new(wxVERTICAL);
my $news_title = Wx::HyperlinkCtrl->new($news_panel, wxID_ANY, $news_item{'title'}, $news_item{'url'}, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
my $news_description = Wx::StaticText->new($news_panel, wxID_ANY, $news_item{'description'}, wxDefaultPosition);
$news_description->Wrap(560);
$news_sizer->AddSpacer(5);
$news_sizer->Add($news_title, 0);
$news_sizer->AddSpacer(5);
$news_sizer->Add($news_description, 0);
$news_sizer->AddSpacer(5);
$vbox->Add($news_panel, 0, wxEXPAND|wxALL);
}
$self->SetSizer($vbox);
$vbox->Fit($self);
$self->Refresh();
}