3

wxMenuBar、wxPanel、wxTextCtrl、およびwxStaticBitmapのみを含む単純なフレームのみを表示するwxPerlアプリケーションを作成しました。開発および展開プラットフォームは、WindowsXP以降です。

画像は次のようにフォームに追加されます。

my $logoData = Wx::Bitmap->new(App::Resource::Images::getLogoPath(), wxBITMAP_TYPE_BMP);
my $logo = Wx::StaticBitmap->new($self, -1, $logoData);

画像の表示に問題はありませんでした。ユーザーのデスクトップにアイコンを追加するInnoSetupを使用してインストーラーを作成しました。アプリケーションがそのショートカットを使用して開始した場合、ウィンドウは私のwxStaticBitmapを描画しません。アプリケーションがフォーカスを失い、他のウィンドウがその上に移動している場合にのみ、wxStaticBitmapが描画されます。

スタートメニュー、クイックスタート、またはwxparでコンパイルした直後、またはperl interperterでアプリケーションを起動すると、wxStaticBitmapが正常に表示されます。

私が見つけた唯一のものは、私のwxFrameでの呼び出しRefresh()ですUpdate()。このwxFrameを作成しShow(1)た後、その直後Refresh()に呼び出しますUpdate()。しかし、これまでのところ運がありませんでした。

4

1 に答える 1

1

wxStaticBitmap は wxWindow から派生しているため、Update メソッドと UpdateWindowUI メソッドの両方があります。$logo を作成した直後にそれらの 1 つを呼び出すとどうなりますか?

編集:試してみましたが、 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、ボタンをサイザーに配置し、上記のコードをそのイベント ハンドラー コールバックに配置しました。

于 2010-01-22T05:00:40.833 に答える