2010-08-16 4 views
2

У меня есть панель инструментов, отображаемая в верхней части прокрутки. Когда я вызываю invalidate в режиме прокрутки, я понимаю, что на панели инструментов и в режиме прокрутки возникает проблема мерцания экрана.Предотвращение мерцания экрана для CScrollView и CToolBar

Я пытаюсь обходным путем, переопределяя их обработчик события удаления стирания.

Этот метод работает для просмотра прокрутки, но не для панели инструментов.

Вот мой фрагмент кода.

void MyCScrollView::OnInitialUpdate() { 
    CScrollView::OnInitialUpdate(); 
    // ToolBar is NonFlickeringCToolBar, inherited from CToolBar 
    ToolBar.Create(this); 
    ToolBar.LoadToolBar(IDR_TOOLBAR); 
    ToolBar.ShowWindow(SW_SHOW); 
    ToolBar.SetBarStyle(CBRS_ALIGN_TOP | CBRS_SIZE_FIXED); 
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); 
} 

BOOL MyCScrollView::OnEraseBkgnd(CDC* pDC) 
{ 
    // Override to prevent screen flickering. Works! 
    return TRUE; 
} 

BOOL NonFlickeringCToolBar::OnEraseBkgnd(CDC* pDC) { 
    // Override to prevent screen flickering. Doesn't work! 
    return TRUE; 
} 

Вот скриншот, прежде чем я переопределяю обработчик события удаления.

alt text

Вот экран стрелять после того, как я переопределить обработчик события стирания фона. Не то, что панель инструментов по-прежнему мерцает, с дополнительной проблемой: ее сплошной фон ушел, пока я не накидываю курсор мыши на его тело.

alt text

Я желаю

  1. Сделайте вид прокрутки и панель инструментов и без мерцающих
  2. Solid фон для панели инструментов все еще там

Все, что я пропустил?

ответ

1

Запрет области, занимаемой панели инструментов, перерисовывается.

BOOL MyCScrollView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
    // Add the WS_CLIPCHILDREN style to avoid repaint problems. 
    // Without this, our toolbar will keep flickering. 
    cs.style |= WS_CLIPCHILDREN; 

    return CView::PreCreateWindow(cs); 
} 
Смежные вопросы