Mac OS X EVT_ERASE_BACKGROUND

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
aux88
In need of some credit
In need of some credit
Posts: 6
Joined: Mon Jul 23, 2012 6:11 am

Mac OS X EVT_ERASE_BACKGROUND

Post by aux88 » Mon Jul 23, 2012 6:13 am

Может, кто сталкивался?

Вот... не ирейзится фон в общем на 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. Извинияюсь, если не сразу отвечу.

aux88
In need of some credit
In need of some credit
Posts: 6
Joined: Mon Jul 23, 2012 6:11 am

Re: Mac OS X EVT_ERASE_BACKGROUND

Post by aux88 » Mon Jul 23, 2012 9:31 am

Версия 2.8.12

aux88
In need of some credit
In need of some credit
Posts: 6
Joined: Mon Jul 23, 2012 6:11 am

Re: Mac OS X EVT_ERASE_BACKGROUND

Post by aux88 » Mon Jul 23, 2012 6:17 pm

Разобрался. MainFrame_OnPaint() перерисовывает только MainFrame без дочерних контролов.
Нужно было убрать event.Skip() в OnPaint()

Post Reply