Page 1 of 1

Mac OS X EVT_ERASE_BACKGROUND

Posted: Mon Jul 23, 2012 6:13 am
by aux88
Может, кто сталкивался?

Вот... не ирейзится фон в общем на wxFrame на МАК ОС ИКС

MainFrame унаследован от wxFrame, присоединены OnPaint и OnEraseBackground, которые выглядят следующим образом:

Code: Select all

void
MainFrame::MainFrame_OnPaint(wxPaintEvent& event)
{
#if 1
    wxPaintDC dc(this);
    dc.SetBackground(wxBrush(wxColor(255, 255, 255)));
    dc.Clear();
#endif

    // передать дефолтному обработчику
    event.Skip();
}

void
MainFrame::MainFrame_OnEraseBackground(wxEraseEvent& event)
{
#if 0
    wxDC* dc = event.GetDC();

    dc->SetBackground(wxBrush(wxColor(255, 255, 255)));
    dc->Clear();
    event.StopPropagation();
#endif

    event.StopPropagation();
}

В mainFrame::ctor() ставлю: this->SetBackgroundStyle(wxBG_STYLE_CUSTOM);


Перепробовал разные комбинации #if 0/1 и event.StopProp..() То есть пытался забивать OnEraseBackground (на мак ос икс, говорят, эмулируется) и очищать бэкграунд в OnPaint
Задача простая: нарисовать округленный прямоугольник вокруг группы контролов. Может, не самый удачный вариант рисовать его на общем бэкграунде, но на windows все работает замечательно. На маках вообще нулевой эффект от стирания бэкграунда, не говоря о рисовании на нем чего-либо.

Как хотя бы заставить фон стереться нужным мне цветом?

Или если по другому, если не передавать управление дефолтному обработчику OnPant (не вызывая event.Skip()) то как нарисовать все контролы по-одному? То есть как вызвать OnPaint на моем wxPaintDc для каждого контрола?

P.S. Извинияюсь, если не сразу отвечу.

Re: Mac OS X EVT_ERASE_BACKGROUND

Posted: Mon Jul 23, 2012 9:31 am
by aux88
Версия 2.8.12

Re: Mac OS X EVT_ERASE_BACKGROUND

Posted: Mon Jul 23, 2012 6:17 pm
by aux88
Разобрался. MainFrame_OnPaint() перерисовывает только MainFrame без дочерних контролов.
Нужно было убрать event.Skip() в OnPaint()