У меня есть панель инструментов, отображаемая в верхней части прокрутки. Когда я вызываю 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;
}
Вот скриншот, прежде чем я переопределяю обработчик события удаления.
Вот экран стрелять после того, как я переопределить обработчик события стирания фона. Не то, что панель инструментов по-прежнему мерцает, с дополнительной проблемой: ее сплошной фон ушел, пока я не накидываю курсор мыши на его тело.
Я желаю
- Сделайте вид прокрутки и панель инструментов и без мерцающих
- Solid фон для панели инструментов все еще там
Все, что я пропустил?