更改视图背景的问题
最近碰到了更改视图背景的问题,我的是SDI程序。在网上查到了有人用这个函数
virtual BOOL OnEraseBkgnd(*pDC)
ON_WM_ERASEBKGND()
virtual BOOL squareview::OnEraseBkgnd(*pDC)
{
squaredoc*pdoc=GetDocument();
CRect rect;
CBrush brush(m_bkgndcolor);
CClientDC dc(this);
dc.GetClipBox(&rect);
dc.FillRect(&rect,&brush);
return TRUE;
}
这个方法本身没有问题,因为在view的OnDraw消息之前MFC会自动调用一次ON_WM_ERASEBKGND,从而使得背景的颜色得到更改。但是当这个函数与view的OnUpdate函数合用时,问题就来了.大家都知道,OnUpdate是与document的UpdateAllViews合用的一个函数
squaredoc::UpdateAllViews(NULL,1,(CObject*)prect);
void squareview::OnUpdate(CView *pSender, LPARAM lHint, CObject *pHint)
{
if(lHint==1)
{
CRect* prect=(CRect*)pHint;
InvalidateRect(prect);
return;
}
CView::OnUpdate(pSender,lHint,pHint);
}
目的是使得view在OnDraw时仅重绘prect指定的区域,以提高程序的效率。但这样会导致prect以外的区域统统被背景色覆盖,也就是说如果在prect以外如果有其他图像的话,这些图像将会被覆盖掉。
请问各位大虾有没有什么仅更改背景色而不影响背景上的图像的方法呢?
注:在PreCreateWindow中更改cs.lpszclass不算