今天无意中看到了这个的解决方法,我的项目是10年做的一个监控类的东西,使用的WinForm开发。其中使用到了自定义控件UserControl;界面上有自己做的地图,地图上使用了自定义控件用来显示状态,但是当拖动地图的时候就会出现闪烁的问题。这个一直困扰我,直到项目结束的时候都没能处理好,只能按照平常的双缓冲方式解决。
今天无意中看到了一个解决方法,于是就把原来的项目拿出来实验了一下,确实有改善,因为以前的效果是拖动的时候会出现一层一层的效果,现在不会了,但是现在会有一下闪白的效果,如果能把这个也解决的话,就真的完美了。
解决方法是参照下面网址中的内容:
原帖地址:http://www.dotblogs.com.tw/rainmaker/archive/2012/02/22/69811.aspx
主要就是重写UserControl和Form的CreateParams方法。
前端调用UserControl的窗体这样写:
1
2
3
4
5
6
7
8
9
|
protected
override
CreateParams CreateParams
{
get
{
CreateParams cp =
base
.CreateParams;
cp.ExStyle |= 0x02000000;
// Turn on WS_EX_COMPOSITED
return
cp;
}
}
|
UserControl中的代码同样也需要重写,这样写:
1
2
3
4
5
6
7
8
9
|
protected
override
CreateParams CreateParams
{
get
{
var parms =
base
.CreateParams;
parms.Style &= ~0x02000000;
// Turn off WS_CLIPCHILDREN
return
parms;
}
}
|
这样之后,效果有明显的改善。
http://luacloud.com/2012/winform-solve-the-problems-usercontrol-custom-controls-blinking.html