更改视图背景的问题

bioruan 2009-11-11 03:36:24
最近碰到了更改视图背景的问题,我的是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不算



...全文
55 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
webing520 2009-11-11
  • 打赏
  • 举报
回复
OnUpdate();
bioruan 2009-11-11
  • 打赏
  • 举报
回复
十分感谢,有没有什么方法可以像precreatewindow里的cs.lpszclass那样直接更改View的原始背景呢?
快乐鹦鹉 2009-11-11
  • 打赏
  • 举报
回复
用invalidate或者invalidaterect
bioruan 2009-11-11
  • 打赏
  • 举报
回复
哦,我直接删掉了讨厌的OnEraseBkgnd 更改背景色后调用UpdateAllViews让OnDraw直接重绘也能解决问题。
附:除了UpdateAllViews还有什么能让OnDraw响应呢?比如发送消息的话,应该发送什么消息?

谢谢happyparrot
快乐鹦鹉 2009-11-11
  • 打赏
  • 举报
回复
你只是发WM_ERASEBKGND,OnDraw为啥要响应?
bioruan 2009-11-11
  • 打赏
  • 举报
回复
不行啊,背景色没有变化
我把更改背景色的选项放进了Menu squaredoc里有对应的函数响应背景色的更改,然后通过发送消息的方式通知view更改背景
::SendMessage(pview->m_hWnd,WM_ERASEBKGND,NULL,NULL);
我用AfxMessageBox跟踪了一下,view的OnEraseBkgnd确实收到了消息,也返回了TRUE,但随后并没有调用OnDraw进行重绘,奇怪
快乐鹦鹉 2009-11-11
  • 打赏
  • 举报
回复
在OnEraseBkgnd中,只return TRUE;
在OnDraw中,给CDC先选入你在OnEraseBkgnd中绘制的内容即可。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧