Почему wxPerl не рисует мой wxStaticBitmap, когда я запускаю программу из ярлыка Windows?

Я сделал приложение 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 ответ

Решение

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 и выше код в обратном вызове обработчика событий.

Другие вопросы по тегам