防止窗口抖动以及窗体不刷新问题
2015-10-21 16:39
344 查看
http://stackoverflow.com/questions/5859826/datagridview-draws-wrong
由于窗体上控件多,且有背景的情况下,控件设为背景设为透明,会导致窗体的刷新很慢很卡,从而窗体在闪烁,卡顿。
之前一直在网上搜寻解决的办法,试过了很多什么双缓冲啊之类的,发现效果并不大。
最后找到下面的方法可以解决了。但是奇怪的是,在有些电脑上运行时会发生窗体不刷新的问题。然后就参考下面的那个网址,最下面的答案。
个人总结一下,可能是系统版本的问题所导致的。网上有说是因为“xp特有的双缓冲绘图机制”。后来用上这个WS_EX_COMPOSITED(用双缓冲从下到上绘制窗口的所有子孙),再开启窗体的透明样式,问题都解决了。
只要把透明样式开启便可,所以我把透明度设置为100%,不想让窗体透明。
由于窗体上控件多,且有背景的情况下,控件设为背景设为透明,会导致窗体的刷新很慢很卡,从而窗体在闪烁,卡顿。
之前一直在网上搜寻解决的办法,试过了很多什么双缓冲啊之类的,发现效果并不大。
最后找到下面的方法可以解决了。但是奇怪的是,在有些电脑上运行时会发生窗体不刷新的问题。然后就参考下面的那个网址,最下面的答案。
个人总结一下,可能是系统版本的问题所导致的。网上有说是因为“xp特有的双缓冲绘图机制”。后来用上这个WS_EX_COMPOSITED(用双缓冲从下到上绘制窗口的所有子孙),再开启窗体的透明样式,问题都解决了。
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED if (this.IsXpOr2003 == true) { cp.ExStyle |= 0x00080000; // Turn on WS_EX_LAYERED this.Opacity = 1; } return cp; } } //防止闪烁 private Boolean IsXpOr2003 { get { OperatingSystem os = Environment.OSVersion; Version vs = os.Version; if (os.Platform == PlatformID.Win32NT) if ((vs.Major == 5) && (vs.Minor != 0)) return true; else return false; else return false; } }
只要把透明样式开启便可,所以我把透明度设置为100%,不想让窗体透明。
相关文章推荐
- Android中代码设置EditText的小数位数
- linux netstat命令
- 如何消除一个数组里面重复的元素?
- bzoj 1005 1211 prufer序列总结
- JS 去字符串空格 总结
- UITableViewCell定制
- 边框border属性总结
- 队列---顺序队列存储结构的不足(假溢出)
- Caffe框架,图像数据转换成LMDB数据格式
- CvCreateImage函数说明
- Caffe框架,图像数据转换成LMDB数据格式
- logstash使用grok正则解析日志
- IOS9 解决中文乱码
- J2EE中EL的隐式对象param和paramValues
- 使用UncaughtExceptionHandler捕获运行时异常
- PHP统计当前在线用户数实例讲解
- Tomcat启动脚本
- 【ValueError: math domain error】
- ajax从服务器拿了数据回来循环显示在HTML后不能响应事件
- SVN的Trunk,Branch和Tag