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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
morruth
In need of some credit
In need of some credit
Posts: 4
Joined: Sun Nov 11, 2012 7:37 pm

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

Post by morruth »

пишу на wxperl, наткнулся на вот такую странность
есть у меня функция, которая берёт картинку, допечатывает на ней номер и отображает
код вот такой
sub ShowBall{
my ($self,$balln,$ballval)=@_;
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();

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

И вторая проблема - в пнг-файле есть прозрачные участки, но прозрачность тоже работает только под линуксом
в виндах там получается чёрный цвет.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 »

смотря куда ты этот код засунул... в EVT_PAINT?

http://wiki.wxwidgets.org/Drawing_on_a_panel_with_a_DC
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
morruth
In need of some credit
In need of some credit
Posts: 4
Joined: Sun Nov 11, 2012 7:37 pm

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

Post by morruth »

borr_1 wrote:смотря куда ты этот код засунул... в EVT_PAINT?
Этот код в EVT_BUTTON
В смысле надо завести реакцию на EVT_PAINT и обновление окна засунуть туда?
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 »

ну да, прямо как в инструкции.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
Post Reply