странная прорисовка битмапов под 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 » Sun Nov 11, 2012 7:52 pm

пишу на 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();

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

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

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 » Tue Nov 13, 2012 4:25 am

смотря куда ты этот код засунул... в 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 » Wed Nov 14, 2012 2:22 pm

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 » Thu Nov 15, 2012 4:48 am

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

Post Reply