Почему wxPerl не рисует мой wxStaticBitmap, когда я запускаю программу из ярлыка Windows? - PullRequest
3 голосов
/ 21 января 2010

Я создал приложение wxPerl, которое представляет собой простой фрейм, который содержит только wxMenuBar, wxPanel, wxTextCtrl и wxStaticBitmap. Платформа разработки и развертывания - Windows XP и выше.

Изображение добавляется в форму следующим образом:

my $logoData = Wx::Bitmap->new(App::Resource::Images::getLogoPath(), wxBITMAP_TYPE_BMP);
my $logo = Wx::StaticBitmap->new($self, -1, $logoData);

У меня не было проблем с отображением изображения. Я сделал установщик с Inno Setup, который добавляет значок на рабочий стол пользователя. Если приложение запускается с использованием этого ярлыка, окно не рисует мой wxStaticBitmap. Только когда приложение теряет фокус и какое-то другое окно перемещается над ним, только тогда будет нарисован мой wxStaticBitmap.

При запуске приложения из меню «Пуск», быстрого запуска, или непосредственно после компиляции его с помощью wxpar, или только с помощью perl interperter, отображается мой wxStaticBitmap в порядке.

Единственное, что я нашел, это звонит Refresh() и Update() на моем wxFrame. После создания этого wxFrame я вызываю Show(1) и сразу после этого Refresh() и Update(). Но пока не повезло с этим.

1 Ответ

1 голос
/ 22 января 2010

wxStaticBitmap является производным от wxWindow, поэтому имеет методы Update и UpdateWindowUI. Что происходит, когда вы вызываете один из них на логотипе $ сразу после его создания?

Редактировать : Я только что попробовал, и методы Update * не помогают. Однако то, что заставляет заставить его перерисовать, это вызвать SetBitmap после создания объекта. Вот что я сделал:

my $bmp = Wx::Bitmap->new("./testcard.bmp", wxBITMAP_TYPE_BMP);
my $logo = Wx::StaticBitmap->new($frame, wxID_ANY, $bmp);
$logo->SetBitmap($bmp);

$frame - это Wx::Frame, и я просто поместил кнопку в sizer, а вышеуказанный код - в обратный вызов обработчика событий.

...