对话框闪烁问题

luoyz520 2013-02-01 10:44:45
多重窗口,即一个父窗口有多个子窗口,子窗口上面还有子窗口,改变大小时,界面闪烁很厉害,有什么办法可以解决?
...全文
325 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoyz520 2013-02-04
  • 打赏
  • 举报
回复
引用 2 楼 tiger9991 的回复:
WS_CLIPCHILDREN可以让子控件不重绘。但是会引来许多问题。特别是如果子控件窗体需要重绘的时候。 WS_CLIPSIBLINGS 是关联重绘。兄弟重叠子窗体一起重绘。 楼主Invalidate使用了没有?
加上这两个属性后,自绘的子控件确实出问题了,容易出现重影,有没什么好的解决方法?
  • 打赏
  • 举报
回复
呵呵,学习一下。
c1997sdn 2013-02-01
  • 打赏
  • 举报
回复
闪烁问题最好要用双缓存的方法来解决。 双缓冲就是除了在屏幕上有图形进行显示以外,在内存中也有图形在绘制。我们可以把要显示的图形先在内存中绘制好,然后再一次性 的将内存中的图形按照一个点一个点地覆盖到屏幕上去(这个过程非常快,因为是非常规整的内存拷贝)。这样在内存中绘图时,随便用什么反差大的背景色进行清 除都不会闪,因为看不见。当贴到屏幕上时,因为内存中最终的图形与屏幕显示图形差别很小(如果没有运动,当然就没有差别),这样看起来就不会闪。 给楼主推荐篇文章:http://blog.csdn.net/yuntongsf/article/details/4260875
小新蜡笔 2013-02-01
  • 打赏
  • 举报
回复
好多的不对
zhangyihu321 2013-02-01
  • 打赏
  • 举报
回复
一般情况还是创建时风格设置不对
zhangyihu321 2013-02-01
  • 打赏
  • 举报
回复
如果还是不行就用 双缓冲 内存DC
mirro187_ 2013-02-01
  • 打赏
  • 举报
回复
//在这个函数改下试试 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_SYSMENU|WS_CLIPCHILDREN; cs.style&=~FWS_ADDTOTITLE; return TRUE; }
引用 2 楼 tiger9991 的回复:
WS_CLIPCHILDREN可以让子控件不重绘。但是会引来许多问题。特别是如果子控件窗体需要重绘的时候。 WS_CLIPSIBLINGS 是关联重绘。兄弟重叠子窗体一起重绘。 楼主Invalidate使用了没有?
傻X 2013-02-01
  • 打赏
  • 举报
回复
WS_CLIPCHILDREN可以让子控件不重绘。但是会引来许多问题。特别是如果子控件窗体需要重绘的时候。 WS_CLIPSIBLINGS 是关联重绘。兄弟重叠子窗体一起重绘。 楼主Invalidate使用了没有?
jimette 2013-02-01
  • 打赏
  • 举报
回复
WS_CLIPCHILDREN与WS_CLIPSIBLINGS 添加了么?
luoyz520 2013-02-01
  • 打赏
  • 举报
回复
现在在右下角拖动改变窗口大小的过程中,子窗口和父窗口之间有错位的情况,这个又该如何处理?
luoyz520 2013-02-01
  • 打赏
  • 举报
回复
引用 12 楼 tiger9991 的回复:
我的意思是,楼主自己在Invalidate可能用的不好,导致闪烁。 数据插入太平凡也会有此类问题。对话框内容是啥?
应该不是使用Invalidate的问题,是在右下角拖动改变窗口大小时闪烁。有多个对话框可以切换的,比如上面画了一些矩形框、文字、和基本的控件。
傻X 2013-02-01
  • 打赏
  • 举报
回复
我的意思是,楼主自己在Invalidate可能用的不好,导致闪烁。 数据插入太平凡也会有此类问题。对话框内容是啥?
luoyz520 2013-02-01
  • 打赏
  • 举报
回复
引用 7 楼 c1997sdn 的回复:
闪烁问题最好要用双缓存的方法来解决。 双缓冲就是除了在屏幕上有图形进行显示以外,在内存中也有图形在绘制。我们可以把要显示的图形先在内存中绘制好,然后再一次性 的将内存中的图形按照一个点一个点地覆盖到屏幕上去(这个过程非常快,因为是非常规整的内存拷贝)。这样在内存中绘图时,随便用什么反差大的背景色进行清 除都不会闪,因为看不见。当贴到屏幕上时,因为内存中最终的图形……
双缓冲我用过了,在单个窗口的情况下是可以解决闪烁问题的,但在这种带子窗口的,可能是我的方法不对,还是会有问题。有没有详细一点的方法?
luoyz520 2013-02-01
  • 打赏
  • 举报
回复
引用 2 楼 tiger9991 的回复:
WS_CLIPCHILDREN可以让子控件不重绘。但是会引来许多问题。特别是如果子控件窗体需要重绘的时候。 WS_CLIPSIBLINGS 是关联重绘。兄弟重叠子窗体一起重绘。 楼主Invalidate使用了没有?
会有什么问题,能说详细一点么,愿闻其详~
luoyz520 2013-02-01
  • 打赏
  • 举报
回复
引用 1 楼 sha_jinhao 的回复:
WS_CLIPCHILDREN与WS_CLIPSIBLINGS 添加了么?
嗯 加上以后好多了 但似乎还有改进的空间 我再看看

15,978

社区成员

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

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