Mfc 防止CScrollView和CToolBar的屏幕闪烁
我有一个工具栏显示在滚动视图的顶部。当我在scroll view上调用invalidate时,我意识到工具栏和scroll view都存在屏幕闪烁问题 我试图通过重写它们的擦除背景事件处理程序来找到解决方法 此方法适用于滚动视图,但不适用于工具栏 这是我的代码片段Mfc 防止CScrollView和CToolBar的屏幕闪烁,mfc,Mfc,我有一个工具栏显示在滚动视图的顶部。当我在scroll view上调用invalidate时,我意识到工具栏和scroll view都存在屏幕闪烁问题 我试图通过重写它们的擦除背景事件处理程序来找到解决方法 此方法适用于滚动视图,但不适用于工具栏 这是我的代码片段 void MyCScrollView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); // ToolBar is NonFlickeringCToolBar,
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;
}
下面是重写擦除背景事件处理程序之前的屏幕截图
下面是重写擦除背景事件处理程序后的屏幕截图。并非如此,工具栏仍在闪烁,还有一个问题:在我将鼠标光标悬停在工具栏主体上之前,它的坚实背景已经消失
我希望
我遗漏了什么?防止重新绘制工具栏占用的区域
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);
}