C语言中绘图时闪烁的问题

    这几天公司相关的设备软件要做新版本release的最后检测工作,大问题没有,但是出现了两个细节的问题:一个是在等待元件进入设备的时候整个屏幕呈现出了明显的低频闪动,另外一个问题是在元件检测的工程中屏幕内的某个区域出现了高频的快速刷新,重绘的循环过程,从而导致了高频闪动。这两个问题其实并不算逻辑性的bug,只是会造成一些视觉上的不适(设备是自动化检测设备,其实也不需要操作员实时的在产线上)。但是这恰恰戳中了我刨根问底的那股劲儿,我决定对代码做一次review,找到问题的根源。

    认真分析了代码,我发现了同事在合并一些新功能代码的时候,忽略了一些细节:

    首先是在设备waiting的阶段,为了更新一些实时的数据,同事在某个循环中加入了如下的语句

	InvalidateRect(hWnd,NULL,FALSE);
	UpdateWindow(hWnd);

    这是两行代码适用于刷新指定区域的窗口。InvalidateRect用于使指定句柄区域失效,之后才能通过updatewindow重新绘制指定的句柄的区域。两者必须配合使用才能实现页面的刷新。用法是没有问题的,但是在循环中使用的时候要注意,如果要做更新的内容较多(例如整个屏幕,而且信息较多)的话,加之更新的较为频繁,很容易会出现明显的本文所提到的第一个问题,即出现屏幕低频的闪动。

    解决思路:(1)当然就是去除冗余的uptdatewindow的代码(2)不得不在循环中使用updatewindow的时候,注意添加一些判定条件,当页面有更新信息的时候再进行update。我采用了后者,哈哈,解决了一个问题。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值