Закраска фона CWnd
От: Brun  
Дата: 22.08.06 07:12
Оценка:
Создал своё класс окошка на котором создаю COM врапер (визуальный компонент) сам компонент перерисовывается, а вот фон моего окошка нет, не знаю как с этим бороться, но наверное есть какой то совсем простой способ


Создание компонента:
CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    AfxEnableControlContainer();
    m_mapCtrl.Create( NULL, NULL, WS_CHILD|WS_OVERLAPPED|WS_VISIBLE, CRect( 0,0, 0, 0), this, 0 );

        return 0;
}


Создание окошка:
BOOL CMyWnd::CreateMap( CWnd* pWnd, const CRect& rect)
{
    return this->CreateEx( NULL, NULL, " ", WS_POPUP | WS_CHILD | WS_BORDER | WS_THICKFRAME | WS_VISIBLE, rect, pWnd, 0);
}


А теперь как я пытаюсь закрашивать фон:
void CMyWnd::OnPaint()
{
    CBrush backBrush(RGB(0, 128, 128));

    CRect rect;
    GetUpdateRect( &rect, true );

    CPaintDC dc(this);

    dc.FillRect( &rect, &backBrush );
}


Фон то так закрашивается, но есть одна проблема: если необходимо часто очищать фон (у меня прописана процедура ресайзинга окна с изменением размера компонента) то видно мерцание.... я пытался сделать через Rng но тут вообще ничего не получается, т.к. GetUpdateRng выдаёт ERROR_RNG...

ну конечно можно вычислять фрагмент который занимает компонент и его вычитать, но это тупо и если компонентов много вообще плохо

плиз, если кто знает, подскажите как сделать грамотную перерисовку фона
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.