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