3

我制作了一个 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 解释器显示我的 wxStaticBitmap 很好。

我发现的唯一一件事就是在我的 wxFrame 上调用Refresh()和。Update()在创建这个 wxFrame 之后,我调用Show(1)and 之后Refresh()Update(). 但到目前为止还没有运气。

4

1 回答 1

1

wxStaticBitmap 是从 wxWindow 派生的,因此它同时具有 Update 和 UpdateWindowUI 方法。创建 $logo 后立即在 $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);

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

于 2010-01-22T05:00:40.833 回答