C# 解决窗体闪烁

2023-05-16

C# 解决窗体闪烁

在Windows窗体上造成“闪烁”的窗体上有很多控制。造成这种闪烁的原因有两个:

1.当控件需要被绘制时,Windows发送一个控件两个消息。第一个(WM_ERASEBKGND)导致背景被绘制(OnPaintBackground),第二个导致前景被绘(WM_PAINT,射击OnPaint)。首先看到背景,然后当绘图缓慢时前景变得明显。Windows窗体使用ControlStyles.OptimizedDoubleBuffer为这种闪烁提供了一个现成的解决方案。

2.有很多控件的表单需要很长时间来绘制。尤其是按钮控件的默认样式是昂贵的。一旦你得到了超过50个控件,它开始变得明显。Form类首先绘制其背景,并在控件需要去的地方留下“漏洞”。当您使用不透明度或透明度键属性时,这些孔通常是白色的,黑色的。然后每个控件都被绘制,填充在洞中。视觉效果是丑陋的,在Windows窗体中没有现成的解决方案。双缓冲不能解决它,因为它只适用于单一控制,而不是一组复合控件。

我在SDK头文件中发现了一个新的Windows风格,可用于Windows XP和(推测)Vista:WS_EX_COMPOSITED。随着窗体打开窗体,Windows XP将在窗体及其所有子控件上进行双缓冲。这有效解决了闪烁的第二个原因。这里有一个例子:

using System; 
使用System.Drawing; 
使用System.Windows.Forms; 

命名空间WindowsApplication1 { 
  公共部分类Form1:窗体{ 
    公共Form1(){ 
      InitializeComponent(); 
      for(int ix = 0; ix <30; ++ ix){ 
        for(int iy = 0; iy <30; ++ iy){ 
          Button btn = new Button(); 
          btn.Location = new Point(ix * 10,iy * 10);
          this.Controls.Add(BTN); 
        } 
      } 
    } 
    protected override CreateParams CreateParams { 
      get { 
        CreateParams cp = base.CreateParams; 
        cp.ExStyle | = 0x02000000; 
        返回cp; 
      } 
    } 
  } 


要看到它在工作,最大限度地减少和恢复的形式,并观察其绘画行为。注释cp.ExStyle赋值以查看差异。您只需要复制并粘贴CreateParams属性即可。

一些注意事项:这不会加速绘画。绘画正在发生时,您的表单将保持不可见状态,然后在完成后弹出屏幕。而当您使用不透明度或透明度键属性时不起作用,当绘画发生时,表单轮廓将显示为丑陋的黑色矩形。最好的解决方法是使用计时器将不透明度值增加到99%,以使表单在绘制后可见。

我还没有尝试过很多,如果你有使用它的问题,请张贴到这个线程。

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/aaed00ce-4bc9-424e-8c05-c30213171c2c/

        解决办法很easy:

将以下代码块加在父窗体中的任意位置

protected override CreateParams CreateParams

{

get

{

CreateParams cp = base.CreateParams;

cp.ExStyle |= 0x02000000;

return cp;

}

}

原理很简单,引用以下原话:

 A form that has a lot of controls takes a long time to paint.  Especially the Button control in its default style is expensive.  Once you get over 50 controls, it starts getting noticeable.  The Form class paints its background first and leaves "holes" where the controls need to go.  Those holes are usually white, black when you use the Opacity or TransparencyKey property.  Then each control gets painted, filling in the holes.  The visual effect is ugly and there's no ready solution for it in Windows Forms.  Double-buffering can't solve it as it only works for a single control, not a composite set of controls. 

I discovered a new Windows style in the SDK header files, available for Windows XP and (presumably) Vista: WS_EX_COMPOSITED.  With that style turned on for your form, Windows XP does double-buffering on the form and all its child controls.  

 参考链接:https://social.msdn.microsoft.com/Forums/windows/en-US/aaed00ce-4bc9-424e-8c05-c30213171c2c/flickerfree-painting?forum=winforms

                   http://blog.csdn.net/itoccupant/article/details/32334877

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 解决窗体闪烁 的相关文章

  • linux搜索一个文件

    find name filename 转载于 https www cnblogs com tiandsp archive 2012 07 15 2592088 html
  • VINS 回环检测与全局优化

    回环检测 VINS回环检测与全局优化都在pose graph cpp内处理 首先在pose graph node加载vocabulary文件给BriefDatabase用 xff0c 如果要加载地图 xff0c 会loadPoseGraph
  • gcc make 与cmake

    1 gcc xff08 1 xff09 是什么 xff1f 它是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器 它可以编译很多种编程语言 xff08 括C C
  • server unexpectedly closed network connection

    在使用 ssh 登入 Linux 時 xff0c 卻發生了 server unexpectedly closed network connection 的狀況 解决方法 xff1a 1 修改 etc ssh sshd config 將 Us
  • 开源SDN控制器和商用SDN控制器一览

    以下是来自IT168收集的2014年可追寻到的开源SDN控制器和商用SDN控制器 xff0c 此处转载以供大家知悉 xff0c 更多控制器信息需要大家自己动手去查询和理解 开源SDN控制器组织 随机排序 xff0c 仅为了查看便利 1 组织
  • openstack 异常处理

    1 xff0c keystone 验证失败 xff0c 例如 xff1a Authorization failed The request you have made requires authentication from 172 16
  • [原]C++头文件的包含顺序研究

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 一 xff0e Google C 43 43 编程风格指南 里的观点 公司在推行编码规范 xff0c 领导提议基本上使用 Google C
  • 使用badblocks检测坏块

    命令格式 badblocks svw b lt 区块大小 gt o lt 输出文件 gt 磁盘装置 磁盘区块数 启始区块 典型的命令如下 写测试 数据安全 sudo badblocks n b 4096 c 16 s dev sda o h
  • Soft NMS改进的非极大值抑制方法的pytorch cuda版本,可以用

    话不多说 xff0c 直接上代码 xff0c 代码是根据soft max论文提供的代码 xff0c 修改的 xff0c 原来的代码是cpu版本 xff0c 且返回的keep参数并不是原来bbox的序列参数 xff0c 所以做了部分修改 xf
  • redis session时,sessionId作为token,可靠实现

    场景 xff1a 在一些不能使用session xff0c 或者session不能保持的情况 xff0c 通常服务器端产生一个token字符串标识用户登录状态 当前端调用后端接口时 xff0c 将此token作为参数加入到请求中 xff0c
  • 好朋友简简单单,好情谊清清爽爽,好缘份久久长长

    好朋友简简单单 xff0c 好情谊清清爽爽 xff0c 好缘份久久长长 A good friend is simple a good friendship is refreshing a good relationship lasts fo
  • LwIP raw api下使用tcp keep alive

    First we should enable this macro in lwipopts h define LWIP TCP KEEPALIVE 1 The following code is implemented after tcp
  • 阿里云API网关(9)常见问题

    网关指南 xff1a https help aliyun com document detail 29487 html spm 61 5176 doc48835 6 550 23Oqbl 网关控制台 xff1a https apigatew
  • mysql实现随机获取几条数据的方法

    sql语句有几种写法 1 xff1a SELECT FROM tablename ORDER BY RAND LIMIT 想要获取的数据条数 xff1b 2 xff1a SELECT FROM 96 table 96 WHERE id gt
  • Spring5:@Autowired注解、@Resource注解和@Service注解

    什么是注解 传统的Spring做法是使用 xml文件来对bean进行注入或者是配置aop 事物 xff0c 这么做有两个缺点 xff1a 1 如果所有的内容都配置在 xml文件中 xff0c 那么 xml文件将会十分庞大 xff1b 如果按
  • zabbix之监控redis云服务

    参考文档 xff1a http www 21yunwei com archi redis云服务的监控难点为服务部署在云上 xff0c 无法对服务进行配置等相关配置 实现方式 xff1a 编写采集脚本 gt 通过zabbix agent连接到
  • 卡方检验的自由度

    为什么80 的码农都做不了架构师 xff1f gt gt gt 自由度 xff1a 取值不受限制的变量的个数 如何理解这句简单的话呢 xff1f 给定一组数据 xff0c 我们来计算不同的统计量 xff0c 看看自由度的变化 这些数据分别为
  • Microsoft.NETCore.App 版本不一致导致的运行失败

    为什么80 的码农都做不了架构师 xff1f gt gt gt 场景重现 今天新建了一个 ASP NET Core 的项目 通过 Web Deploy 顺利发布到IIS上后 但访问时出现如下异常 异常原因 通过手动执行dotnet命令发现运
  • 2007年最值得期待的40部北美大片(争取去电影院看50%)

    1 Spider Man 3 蜘蛛侠3 导 演 xff1a 萨姆 莱米 Sam Raimi 主 演 xff1a 托比 马圭尔 Tobey Maguire Thomas Haden Church 柯尔斯滕 邓斯特 Kirsten Dunst

随机推荐

  • UML实例(五):在线购物系统设计类图

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在线购物系统设计类图文档 xff1a 1 图形文档 设计类图 界面类图 2 文字说明 该部分由以下部分组成 xff1a 类图综述 类描述 类联描述 继承描述 依赖描述和其他
  • 为啥很多网站的用户端都更新了,博客园还是原来的样子呢

    重回博客园发布一些工作中的文章 xff0c 心得 xff0c 发现博客园在界面上还是跟7 8年前没啥区别 xff0c 界面经典好用 xff0c 这是不用质疑的 xff0c 但是发布内容的一些地方 xff0c 好像不像其他网站那么方便了 xf
  • ASP.NET的必须知道的东东(HttpModule,HttpHandler)

    asp net架构 一 asp net请求的处理过程 xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff0d xff
  • matlab练习程序(Hilbert图像置乱)

    正好刚写了Hibert生成曲线 xff0c 不如再加一篇应用的程序 关于Hilbert图像置乱 xff0c 我在网上搜的应用领域主要集中在数字水印和图像加密上 xff0c 而这两个领域我都没怎么接触过 大部分的图像置乱都是如下图的置乱1所示
  • 深入C++“准”标准库,Boost你的力量

    最近一年我电话面试了数十位 C 43 43 应聘者 xff0c 惯用的暖场问题是 工作中使用过 STL 的哪些组件 xff1f 使用过 Boost 的哪些组件 xff1f 得到的答案大多集中在 vector map 和 shared ptr
  • Visual Studio 中创建带有向导的项目模板

    对于测试开发来说 xff0c 建立新工程的次数要远远高于专职开发人员 由于每次建立一个测试工程都要例行公事的设置一大堆属性 xff0c 例行公事的写一些同样的代码 xff0c 非常耗时 因此打算通过建立项目模板来达到自己完成的目的 比如 x
  • Linux -- Samba之SWAT(Web服务器和CGI脚本应用程序)

    6 6 2 SWAT xff08 1 xff09 SWAT xff08 Samba Web Administration Tool xff0c Samba Web 管理工具 xff09 是一个小规模的Web服务器和CGI脚本应用程序 可以为
  • 关于openstack里instance的mac地址

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 假设你在虚拟机里面的使用ifconfig看到的它自己的mac地址为A xff0c 然后在其他随便一台机器上ssh连接一下这个虚拟机 xff08 连接它的floating i
  • 关于linux终端表述,Linux 终端tty pty pts描述

    在使用Linux的过程中 xff0c 当我们通过ssh或者telnet等方式连接到服务器之后 xff0c 会有一个相应的终端来对应 而在直接登陆到Linux服务器的时候也有一个对应的终端 也就是说所有登陆到当前Linux服务器的用户都有一个
  • 指定的网络名不再可用的解决方法

    2009 06 04 16 40 自己用的一台服务器总是出现 34 指定的网络名不再可用 34 这个问题 用ip来访问总是不成功 在网上找了许多方法也不行后来终于找到解决方法了 原因是两个服务没有启动 第一个是Computer Brower
  • Ubuntu使用VNC运行基于Docker的桌面系统

    2019独角兽企业重金招聘Python工程师标准 gt gt gt docker ubuntu vnc desktop From Docker Index docker pull dorowu ubuntu desktop lxde vnc
  • vncserver Can&#39;t find file /root/.vnc/192.168.1.3:1.pid You&#39;ll have to kill the Xvnc process ...

    CentOS 6 5 修改IP后VNC链接失败 xff0c 提示 xff1a The connection was refused by host computer 尝试删除之前的服务时提示以下信息 xff1a Can 39 t find
  • 国内首个网友可以开发应用的开放式网络操作系统

    国内首个面向电脑爱好者的应用开放平台 X在线电脑 xff0c 提供傻瓜化的网络应用程序开发工具 应用梦工厂 xff0c 让不擅长编程的电脑爱好者们 xff0c 也能开发OA ERP等企业应用 xff0c 并且能快速部署到X在线电脑 X在线电
  • linux多级菜单脚本教程,Linux下使用readline库编程实现多级CLI菜单

    一 背景 CLI是一种快速简洁的人机交互方式 xff0c 优秀的CLI 如 mysql vtysh gdb 带给我们非常好的体验 那么CLI都是如何开发出来的 xff1f 二 相关知识 2 1 CLI vs GUI 文章 1 纵观CLI与G
  • 白盒交换机NOS列表(picos/SnapRoute/ONL)

    WIKI NOS xff1a https en wikipedia org wiki Network operating system Examples JUNOS used in routers and switches from Jun
  • powershell

    常用单行命令 目录 查看当前目录的大小 xff0c 并排序输出 du h max depth 61 1 sort nr 自动选择单位 du m max depth 61 1 sort nr 选择M为单位 转载于 https www cnbl
  • 私有云对企业来说有什么好处

    企业是一个受控集团 xff0c 只有良好的管理 决策 xff0c 一个企业才有成功的希望 xff0c 所以管理在企业中占有重要的地位 私有云的使用是一只无形的手 xff0c 它控制着日常工作中的资源和效率 1 企业拥有基础设施 xff0c
  • JavaScript禁用页面刷新

    JavaScript禁用页面刷新代码如下 xff1a 禁用F5刷新 document onkeydown 61 function if event keyCode 61 61 116 event keyCode 61 0 event can
  • java 整除(/) 求余(%) 运算

    1 java 整除 求余 运算 1 求余 System out println 11 2 顾名思义就是11除2的余数 gt 1 System out println 11 2 结果 gt 1 System out println 11 2
  • C# 解决窗体闪烁

    C 解决窗体闪烁 在Windows窗体上造成 闪烁 的窗体上有很多控制 造成这种闪烁的原因有两个 xff1a 1 当控件需要被绘制时 xff0c Windows发送一个控件两个消息 第一个 xff08 WM ERASEBKGND xff09