Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Рисование в STATIC


Автор: GSasha 25.3.2009, 22:35
Привет.
Для задания области для  рисования в диалоговом окне решил использовать контрол Static Text (IDC_STATIC).
То есть делаю вот так:
Код

void CTestDrawDlg::Draw()
{
    CWnd* drawWnd = GetDlgItem( IDC_DRAW_FRAME ); // IDC_DRAW_FRAME == IDC_STATIC
    RECT rect;
    drawWnd->GetClientRect( &rect );
    CClientDC dc( drawWnd );
    CBrush brush( RGB( 20, 100, 250 ) );
    dc.FillRect( &rect, &brush );
    ReleaseDC( &dc );
}


И вызываю этот метод в OnPaint.
Проблема в том, что область статика заполняется цветом не сразу после появления окна диалога, а только после того, как его передвинуть за границу екрана. 
И часть области может остаться не заполненной цветом. (В общем, если я правильно понял - после моего рисования статик перерисовуется по-стандартной схеме).
Можно в таком случае написать класс унаследованный от CStatic и его научить себя рисовать, но я хотел бы именно так как описал выше.
Подскажите правильный путь!

Добавлено через 3 минуты и 4 секунды
Похоже не в ту ветку написал, перенесите плз. smile 

Автор: GSasha 26.3.2009, 10:02
Решение найдено, нужно после окончания рисования удалить область с региона обновления окна, тоесть
Код

     CWnd* drawWnd = GetDlgItem( IDC_DRAW_FRAME );
     RECT rect;
     drawWnd->GetClientRect( &rect );
     CDC* dc = drawWnd->GetDC();
     CBrush brush( RGB( 20, 100, 250 ) );
     dc->FillRect( &rect, &brush );

     drawWnd->ValidateRect( &rect );
     
     ReleaseDC( dc );

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)