解决Windows 程序界面闪烁问题的一些经验(zt)

深入分析MFC之GDI原理透析 为什么会使用GDI呢? 首先要理解一般显示器,是将要显示的内容存放在显存中,framebuffer就是用来存储显示的数据,由DMA自动读取数据将其显示在窗口中,而这里显示的只是一个个的像素点。通常是先显示一行的像素点,发出水平同步信号后,再显示下一行,当整个一屏幕的数据显示完全后,才会发出垂直同步信号,发出下一帧数据。注意这里。。。 MFC如何使用GDI? 首先对于GDI而言,他并不是将图像直接显示在设备上,而是将显示的数据首先绘制在一个设备描述表DC中,这里面存储了显示图像的描述字段,包括物理设备和各种状 阅读详情

原帖:http://blog.joycode.com/yaodong/archive/2004/11/26/39764.aspx

解决Windows 程序界面闪烁问题的一些经验

一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。

先来谈谈闪烁产生的原因

原因一:
如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕
上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。

一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。

这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个
刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像,
这样就会感觉闪烁了。

解决方法:尽量快的输出图像,使输出在一个刷新周期内完成,如果输出内容很多比较慢,那么采用
内存缓冲的方法,先把要输出的内容在内存准备好,然后一次输出到显存。要知道一次API调用一般可以
在一个刷新周期内完成。

对于GDI,用创建内存DC的方法就可以了

原因二:

复杂的界面有多层窗口组成,当windows在窗口改变大小的时候是先重画父窗口,然后重画子窗口,子父
窗口重画的过程一般无法在一个刷新周期内完成,所以会呈现闪烁。

我们知道父窗口上被子窗口挡住的部分其实没必要重画的

解决方法:给窗口加个风格 WS_CLIPCHILDREN ,这样父窗口上被子窗口挡住的部分就不会重画了。

如果同级窗口之间有重叠,那么需要再加上 WS_CLIPSIBLINGS 风格

原因三:

有时候需要在窗口上使用一些控件,比如IE,当你的窗口改变大小的时候IE会闪烁,即使你有了WS_CLIPCHILDREN
也没用。原因在于窗口的类风格有CS_HREDRAW 或者 CS_VREDRAW,这两个风格表示窗口在宽度或者高度变化的时候
重画,但是这样就会引起IE闪烁

解决方法:注册窗口类的时候不要使用这两个风格,如果窗口需要在改变大小的时候重画,那么可以在WM_SIZE的时候
调用RedrawWindow。

原因四:

界面上窗口很多,而且改变大小时很多窗口都要移动和改变大小,如果使用MoveWindow或者SetWindowPos两个API来
改变窗口的大小和位置,由于他们是等待窗口重画完成后才返回,所以过程很慢,这样视觉效果就可能会闪烁。

解决方法:

使用以下API来处理窗口移动,BeginDeferWindowPos, DeferWindowPos,EndDeferWindowPos
先调用 BeginDeferWindowPos 设定需要移动的窗口的个数
使用DeferWindowPos,来移动窗口,这个API并不真的造成窗口移动
EndDeferWindowPos 一次性完成所有窗口的大小和位置的改变。

有个地方要特别注意,要仔细计算清楚要移动多少个窗口,BeginDeferWindowPos设定
的个数一定要和实际的个数一致,否则在Win9x下,如果实际移动的窗口数多于调用BeginDeferWindowPos
时设定的个数,可能会造成系统崩溃。在Windows NT系列下不会有这样的问题。

发表于 Friday, November 26, 2004 3:15 PM

用python turtle画画草地天空星星花朵小草 画画真的是需要些许艺术细胞(这个我好像没有,所以将就将就吧。。) 直接上结果,代码在下方: import turtle as t r_a = 0.8 wight = 1400 # 宽 height = 980 # 高 t.hideturtle() t.colormode(255) t.color((255, 155, 192), "pink") t.setup(wight, height) #绘画速度 t.tracer(10) def move_pen(x, y): # 位置 阅读详情

相关推荐

Blender干货:如何制作小草和小花

hello,我是爱玩的小松鼠!Blender干货:如何制作小草和小花。

qq_35356513的博客 399

GDI+“双缓冲”绘图,避免闪烁源码

资源介绍:。源码结合GDI+模块,在画板上画出和定位文本。资源作者:。@易语言自学网。资源界面:。资源下载:。

Go实战--使用golang开发Windows Gui桌面程序(lxn/walk)

生命不止,继续 go go go!!!golang官方并没有提供Windows gui库,但是今天还是要跟大家分享一下使用golang开发Windows桌面程序,当然又是面向github编程了。知乎上有一个问答: golang为什么没有官方的gui包?这里,主要使用第三方库lxn/walk,进行Windows GUI编程。lxn/walkgithub地址: https://github.com/

一蓑烟雨任平生 也无风雨也无晴 9万+

解决Windows 程序界面闪烁问题的一些经验

一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般

gxh973121的资料 1625

Go语言学习笔记(十七)

命令行程序也叫命令行使用程序或工具,它被设计在终端运行。本章介绍如何使用Go语言创建命令行程序,您将了解如何分析参数以及如何创建子命令

LiMo-bit的杂货 479

小草

夜幕降临,我静听虫鸣,伴着月色入梦,在每一个角落,我都留下了生命的痕迹。因为我知道,我们的生命可以如此美丽。微小却坚定,身披绿衣,挺立在人间。因为我知道,生命的意义不在于显耀。绿意浸染的季节,我是一株小草,晨曦微露,我沐浴在金色的光中,我是一株小草,无声无息在大地,任凭岁月流转,我依旧坚韧不屈,我是生命的象征,是大地的笑容,因为我知道,我是大自然的孩子。梦里,我与风共舞,与星共歌。在生命的舞台上,我尽情绽放。即使无人问津,我也依旧坚韧,无论风吹雨打,我都坚韧不屈,我是小草,我愿与你共享生命,

weixin_67022862的博客 618

致敬疫情期间努力奉献的人,你们有如亲爱的“小草”

作文(和往常一样,满分还是40分):日常生活中,我们每天都能接触到许多物象。如风雨雷电、小草大树、日明光华、山河湖泊,你是否曾经留心过它的,有过感悟?请选择其中的一个物象,抒发你的心灵感...

疯狂模渲大师作者食住玩 3207

小草的天空

    我的故事自己说:)    如果你是有缘人,一定会看到我的故事,不过你还是把它当成一个故事好么?不要太当真,也不要太在意,因为我的脑袋里有太多的幻想,我需要一个地方去释放它们,这里是我的幻想天堂。    如果你能够看懂,那请你微笑,因为你是一个懂我的人。如果你看不懂,也请你微笑,因为它只是一个故事,不论这个故事是否美丽,请你一定保持一个好心情。美丽的心情,对于每个人来说都是重要的,它是我们最

顽强的小草的专栏 1059

《小草》-史光柱

《小草》 作词:史光柱 没有花香 没有树高 我是一棵无人知道的小草 从不寂寞 从不烦恼 你看我的伙伴遍及天涯海角 春风啊春风 你把我吹绿 阳光啊阳光 你把我照耀 河流啊山川 你哺育了我 大地啊母亲 把我紧紧拥抱 没有花香 没有树高 我是一棵无人知道的小草 从不寂寞 从不烦恼 你看我的伙伴遍及天涯海角 春风啊春风 你把我吹绿 阳光啊阳光 你把我照耀 河流啊山川 你哺育了我 大地啊母亲 把我紧紧拥抱 大地啊母亲 把我紧紧拥抱 史光柱说“小草”在平凡中默默奋斗,最终迸发非凡力量。“现在很多人都想做大事,都想做"花

小二、来壶酒 773

往事如烟 - 小草

认识小草的时候,正是2015年的秋天,那个时候小草意气风发,他在兴业银行上赚取了他的第一桶金,他的理念就是高确定性高安全边际,从2008年11月份重仓兴业银行以来,赚得了人生的第一个千万,都是用生活中的闲散资金投资得来的。他的操作逻辑比较简单,就是熟悉一家公司,不停的研究这家公司的业务逻辑,不停的投资,分两个账号,大仓位不动定投,他定投的逻辑是年线以下定投的金额会变多,年线以上定投的资金会变少;另外小仓位做些短线交易过过手瘾。他永远只操作一直股票就是兴业银行,当然打新的不算。他在熊市的兴业银行股价破历...

MySQL 1万+

小草,大树

俞敏洪:当你是地平线上的一棵小草的时候,你有什么理由要求别人在遥远的地方就看见你? 即使走近你了,别人也可能会不看你,甚至会无意中一脚把你这棵草踩在脚底下。 当你想要别人注意的时候,你就必须变成地平线上的一棵大树。 人是可以由草变成树的,因为人的心灵就是种子。 你的心灵如果是草的种子,你就永远是一棵被人践踏的小草。 如果你的心灵是一棵树的种子,就算被人踩到了泥土里,只要你的心灵是一棵树的种子,你早...

null 230

大树小草论

·                                 余敏洪在赢在中国上的“大树小草” 论各位同学们,我们每一个人都需要自己的成长空间,我们人的生活方式有两种方式,第一种是像草一样活着,你尽管活着,每年还在成长,但是你毕竟是一棵草,你吸收雨露阳光,但是长不大。人们可以踩过你,但是人们不会因为你的痛苦,而他产生痛苦,人们不会因为你被踩了,而来怜悯你,因为

xuhuicom.cn 564

小草 客户端 android,小草app安卓版入口

这里小编为大家提供一个非常不错的线上的看剧软件哦,这里每天都会更新一些市面上比较火爆的各种视频资源,而且更新的速度也是十分的快捷的,无需任何的花费,的大家就可以轻松的在线来观看了。整个平台为大家提供的各种服务也是十分的优质的,线上还有专业的客服人员在线为大家提供更加优质的服务哦。小草app安卓版入口的特色:1、线上的所有的视频资源内容都是有平台专业的人士为大家进行审核的,保证都是正版的内容哦;2、...

weixin_42668301的博客 13万+

缺陷报告——小草视频

小草视频的缺陷报告

Qinlin_的博客 147

【cocos shader 008】 摇晃摆动的小草 特效

local frag = [[ #ifdef GL_ES precision mediump float; #endif varying vec2 v_texCoord; .

刀客 2296

【全栈开发实战小草看书之开篇】

全栈开发实战篇之小草看书 - 开篇 介绍 小草看书,一款 gin+vue+flutter 开发的看书应用。内容含古典文学,四大名著,神话武侠,诗词歌赋等。 Android端 技术选型 Web端 vite2,vue3,vue-router4,vuex4,vuex-persistedstate,axios,elementplus,screenfull,less 服务端 gin,gorm,logrus,viper,riot 移动端 flutter,curved_navigation_bar,device_info

weixin_56024424的博客 1739

UE4-利用材质制作小草扰动效果(简版)

利用材质制作小草晃动效果 材质节点图片 制作思路:利用RotateAboutAxis与WorldPositionOffset的功能进行制作,总的来说是通过控制每个像素在世界中的位置偏移进行效果的实现。 涉及到的节点: RotateAboutAxis: 表达式在给定旋转轴、该轴上的某个点以及旋转角度的情况下,旋转三通道矢量输入。此表达式适合于使用 WorldPositionOffset(全局位置偏移) 产生质量优于简单剪切的动画。 NormalizedRotationAxis:输入一个单位化的轴向,这个轴

一个大大大锅盖的博客 3561
上一篇: 为已存在的ATL工程改GUID和接口名
下一篇: WS_CLIPSIBLINGS是什么意思(zt)
jink
博客等级 码龄25年 4粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值