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

标签 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()。但到目前为止还没有成功。

最佳答案

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/

相关文章:

c++ - 如何在 wxWidgets(C++ 代码)中使用 wxListCtrl 向第二列添加值?

c++ - 绝对致命的 wxWidgets 痛苦

python - 如何使用 cython 编译扩展?

windows - 只为一个进程初始化一次临界区

windows - I/O 完成端口可以帮助数据库而不是文件写入吗?

perl - 如何在 Perl 中拆分固定宽度的列?

perl - 使用 readdir 时重命名文件是否安全?

c++ - 如何批量升级和构建VC++ 6项目到VC++ 2010?

multithreading - 如何杀死正在运行的线程并使 perl 应用程序保持事件状态?

c++ - 如何填充 wxListCtrl?