Page 1 of 1

странная прорисовка битмапов под windows

Posted: Sun Nov 11, 2012 7:52 pm
by morruth
пишу на wxperl, наткнулся на вот такую странность
есть у меня функция, которая берёт картинку, допечатывает на ней номер и отображает
код вот такой
sub ShowBall{
my ($self,$balln,$ballval)[email protected]_;
my $blbl=sprintf('%02d',$balln);
my $label='ball'.$blbl;
my $dc=Wx::MemoryDC->new();
#Load ball picture
$dc->SelectObject(Wx::Bitmap->new("ball.png", wxBITMAP_TYPE_ANY));
#Set text params
$dc->SetTextForeground(Wx::Colour->new(@{$C::config->{BallTextFore}}));
$dc->SetTextBackground(Wx::Colour->new(@{$C::config->{BallTextBack}}));
$dc->SetFont(Wx::Font->new($C::config->{BallFontSize}, wxDEFAULT, wxSLANT, wxBOLD, 0, ""));
#write label
my $xc=($ballval>=10)?14:26;
$dc->DrawText($ballval,$xc,17);
$self->{$label}->SetBitmap( $dc->GetAsBitmap());
undef $dc;
}
картинки с шариками, их несколько, которая именно задаётся 2м параметром функции, 3й - что именно надпечатать
на Линуксе всё работает отлично, но под виндами картинка не прорисовывается
(точнее прорисовывается чёрт знает когда, закономерности не уловил)
ладно, добавил в конец
$self->Refresh();
$self->Update();

стало довольно забавно - прорисовывается _предыдущая_ картинка(то есть та, которая была задана прошлым вызовом )
но, если на место, где должна быть картинка, перекрыть другим окном, а потом его убрать - то всё видно.
если добавить рефреш/апдейт _ещё раз_ - тогда отображается нормально, но окошко мигает.
Вопрос - что я делаю не так и можно ли это разрулить как-нибудь более элегантно?

И вторая проблема - в пнг-файле есть прозрачные участки, но прозрачность тоже работает только под линуксом
в виндах там получается чёрный цвет.

Re: странная прорисовка битмапов под windows

Posted: Tue Nov 13, 2012 4:25 am
by borr_1
смотря куда ты этот код засунул... в EVT_PAINT?

http://wiki.wxwidgets.org/Drawing_on_a_panel_with_a_DC

Re: странная прорисовка битмапов под windows

Posted: Wed Nov 14, 2012 2:22 pm
by morruth
borr_1 wrote:смотря куда ты этот код засунул... в EVT_PAINT?
Этот код в EVT_BUTTON
В смысле надо завести реакцию на EVT_PAINT и обновление окна засунуть туда?

Re: странная прорисовка битмапов под windows

Posted: Thu Nov 15, 2012 4:48 am
by borr_1
ну да, прямо как в инструкции.