我制作了一个 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()
。但到目前为止还没有成功。
最佳答案
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);
$frame
是一个 Wx::Frame
,我只是将一个按钮放在一个 sizer 中,并将上面的代码放在它的事件处理程序回调中。
关于windows - 当我从 Windows 快捷方式运行程序时,为什么 wxPerl 不绘制我的 wxStaticBitmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2110040/