Code Bye

在C# winfrom项目,form窗体背景有闪动现象。

 

在C# winfrom项目中,有两个form窗体(form1、form2),在form1中显示监控视频图像实时画面。
在form1窗体中弹出form2窗体,但是form2窗体在显示的过程中,form2窗体背景会有一闪一闪的现象。
这样造成在视觉效果上不是太好,这么样让form2窗体背景不闪动,与正常窗体的显示一样。
请问,为什么会form2窗体背景有一闪一闪的现象,有没有办法解决此问题。谢谢!

5分
应该是 form1中显示监控视频图像实时画面   造成的假象  
引用 1 楼 duanzi_peng 的回复:

应该是 form1中显示监控视频图像实时画面   造成的假象  

有没有办法解决吗?

引用 2 楼 sxl_88 的回复:
Quote: 引用 1 楼 duanzi_peng 的回复:

应该是 form1中显示监控视频图像实时画面   造成的假象  

有没有办法解决吗?

不重叠放 不就行了

引用 3 楼 duanzi_peng 的回复:
Quote: 引用 2 楼 sxl_88 的回复:
Quote: 引用 1 楼 duanzi_peng 的回复:

应该是 form1中显示监控视频图像实时画面   造成的假象  

有没有办法解决吗?

不重叠放 不就行了

你的意思是,不要在form1窗体中弹出form2窗体?
但是实际需求是需要在form1窗体中弹出form2窗体。有没有其它解决方法?

5分
设置了下MDI容器试试
引用 5 楼 caihh1995 的回复:

设置了下MDI容器试试

其实form1窗体与form2窗体不是父子窗体的关系。只是将form2窗体在form1窗体中显示而矣。
有没有其它方法解决这个问题。

p_id->Caption里面的p_id应该是一个结构体吧
呵呵,我发错了,你的问题我没有遇见过,送一我也不知道怎么解决,坐等楼下大神
5分
form2 显示在 form1 中,所以 form1 的画面被刷新时 form2 的画面也要跟着刷新
如果 form1 的刷新速度小于每秒10帧,那么 form2 出现闪烁是必然的(人的平均视觉残留是0.1秒,电影用每秒24帧来保障画面的流畅)
因此你可在 2 帧之间插入一帧(正在显示的那帧),让刷新频率提高来减少闪烁感
楼上看看具体代码实现吗
拦截背景刷新,处理一下winproc,或者设置CreateParams 

http://www.cnblogs.com/Charltsing/p/WinFormNoFlicker.html

处理一下wndproc
引用 12 楼 liucqa 的回复:

处理一下wndproc

能不能提供下相关的源码参考下,或者请问各位还有没有简单实用办法的解决此问题。谢谢。

应该是刷新的问题。
没遇到过。只能帮顶了。
没人知道吗?
学习。。。。
这段代码可以减少窗体切换时的闪动

 protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
                return cp;
            }
        }

相当于先开辟一块空间来加载当前窗体中的数据,然后同时显示,但速度回慢零点几秒,不会闪动。

5分
不要使用背景,用一个picturebox放在最底层就好了    。
引用 18 楼 zanfeng 的回复:

不要使用背景,用一个picturebox放在最底层就好了    。

你说的,能不能再具体点。谢谢。

启动窗体 的 双缓冲。
引用 20 楼 sxl514286339 的回复:

启动窗体 的 双缓冲。

设置窗体的doublebuffer为true,是这样设置吗?
如果是这样设置,我试过,貌似不行。
还是我的设置不对,帮忙看看。

在一个窗体内, 调用另一个窗体,  在创建时的背景图, 控件等闪烁,  启用双缓冲是没用的,  我也网上找了N种解决方案, 都不行

不过,  在被调用的窗体中, 不加载背景图, 而换成比如指定颜色, 这样会好很多. 


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明在C# winfrom项目,form窗体背景有闪动现象。