当我从Windows快捷方式运行程序时,为什么wxPerl不会绘制我的wxStaticBitmap?

时间:2010-01-21 14:48:07

标签: windows perl wxwidgets wxperl

我创建了一个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。

我唯一发现的是在我的wxFrame上调用Refresh()Update()。创建此wxFrame后,我会在Show(1)Refresh()之后调用Update()。但到目前为止还没有运气。

1 个答案:

答案 0 :(得分:1)

wxStaticBitmap派生自wxWindow,因此它同时具有Update和UpdateWindowUI方法。创建后立即拨打$ logo中的其中一个会发生什么?

编辑:我刚刚尝试过,而Update *方法无济于事。但是, 强制重绘的是在创建对象后调用SetBitmap。这是我做的:

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

$frameWx::Frame,我只是在sizer中放了一个按钮,上面的代码在它的事件处理程序回调中。