改变视图背景颜色 偶现问题

djf_1985 2012-12-21 02:10:15
遇到一个偶发的现象,背景颜色刷的有问题。具体描述如下:
一个CFormView中加入了一个CView。cformview中背景是灰色,CView中背景是RGB(249,249,249)色,接近白色。
cformview中在OnEraseBkgnd()中改变背景颜色,代码如下:
CBursh brush(灰色);
CBrush * poldBrush = pDC->SelectObject(&brush);
pDC->PatBlt(rect.left,rect.top,rect.width(),rect.Height(),PATCOPY);
pDC->SelectObject(poldBrush);

CView中是在PreCreateWindow中改变颜色的
CBursh brush(RGB(249,249,249));
cs.lpszClass=AfxRegisterWndClass(NULL,AfxGetApp()->LoadStandardCursor(IDC_ARROW),(HBRUSH)brush,NULL);
retrun TRUE;

cview是在cformviw中显示的,现在在测试中偶尔发现cview的背景不是RGB(249,249,249),而是灰色的,
是cformview的背景色,这是什么原因呢,请大家帮忙看看,谢谢了!
...全文
272 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-04-04
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
hdg3707 2012-12-26
  • 打赏
  • 举报
回复
CFormView这个类隐藏应该可以,就是在CFormView这个类的第一个执行函数最后一句里执行隐藏函数,就是一建立完成就隐藏
djf_1985 2012-12-26
  • 打赏
  • 举报
回复
引用 7 楼 hdg3707 的回复:
你在显示文字地函数再设置背景色试试还会不会出现这种情况.就象加载皮肤软件一样,有时如果计算机运行别的程序,这时你运行程序先显示本来的界面,过了1~2秒才改成皮肤界面,我以前碰到这种情况.显示文字和刷新背景色不是同时进行的,有一个先后顺序,就看你在什么地方显示文字
Cview中显示文字的不会出现这样的,是在OnDraw中输出文字的。 要怎么解决呢?
djf_1985 2012-12-26
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
"cs.lpszClass=AfxRegisterWndClass(NULL,AfxGetApp()->LoadStandardCursor(IDC_ARROW),(HBRUSH)brush,NULL);" 为什么 注册一个 新类, 以后Create用了没有 ?
就是为了改变背景颜色的,因为在CView中,如果在OnEraseBkgnd中改变背景,会比较闪,效果不好,所以这样做。用了,在CFormView中create的
schlafenhamster 2012-12-26
  • 打赏
  • 举报
回复
加上 WS_CLIPCHILDREN 试试。
djf_1985 2012-12-26
  • 打赏
  • 举报
回复
引用 11 楼 hdg3707 的回复:
CFormView这个类隐藏应该可以,就是在CFormView这个类的第一个执行函数最后一句里执行隐藏函数,就是一建立完成就隐藏
我的不能隐藏
djf_1985 2012-12-26
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
//没有CLIPCHILDREN 风格, 这个 rect 包括 view 吧 …
对,没有CLIPCHILDREN 风格,rect包括view的区域
djf_1985 2012-12-24
  • 打赏
  • 举报
回复
引用 4 楼 hdg3707 的回复:
应该是CView还没建立时显示的CFormView背景色,有可能是操作系统执行其它任务时让CView建立时出现迟钝一下导致偶尔显示CFORMVIEW的前景色.
有可能是这种原因吗?Cview中文字都已经显示啊,它应该已经创建了,应该不会是建立出现的吧?
schlafenhamster 2012-12-24
  • 打赏
  • 举报
回复
cformview中在OnEraseBkgnd()中改变背景颜色,代码如下: CBursh brush(灰色); CBrush * poldBrush = pDC->SelectObject(&brush); pDC->PatBlt(rect.left,rect.top,rect.width(),rect.Height(),PATCOPY); pDC->SelectObject(poldBrush); //没有CLIPCHILDREN 风格, 这个 rect 包括 view 吧
hdg3707 2012-12-24
  • 打赏
  • 举报
回复
你在显示文字地函数再设置背景色试试还会不会出现这种情况.就象加载皮肤软件一样,有时如果计算机运行别的程序,这时你运行程序先显示本来的界面,过了1~2秒才改成皮肤界面,我以前碰到这种情况.显示文字和刷新背景色不是同时进行的,有一个先后顺序,就看你在什么地方显示文字
schlafenhamster 2012-12-24
  • 打赏
  • 举报
回复
"cs.lpszClass=AfxRegisterWndClass(NULL,AfxGetApp()->LoadStandardCursor(IDC_ARROW),(HBRUSH)brush,NULL);" 为什么 注册一个 新类, 以后Create用了没有 ?
hdg3707 2012-12-23
  • 打赏
  • 举报
回复
应该是CView还没建立时显示的CFormView背景色,有可能是操作系统执行其它任务时让CView建立时出现迟钝一下导致偶尔显示CFORMVIEW的前景色.
九州剑王 2012-12-22
  • 打赏
  • 举报
回复
比如你去百度下 “VC 对话框 背景”会有很多博客,很多方法~我用第三四种方法改的没问题
djf_1985 2012-12-22
  • 打赏
  • 举报
回复
引用 1 楼 hfz8867879 的回复:
我在 onctrlcolor里面改背景,没问题~你是不是把这个CView也给透明了
没有啊,onctrlcolor中未做处理
九州剑王 2012-12-21
  • 打赏
  • 举报
回复
我在 onctrlcolor里面改背景,没问题~你是不是把这个CView也给透明了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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