窗口更新的时候闪烁怎么处理
窗口更新的时候闪烁怎么办?
我有一个输入法,窗口在更新的时候用的是如下代码:
MoveWindow(hWndComp, ptComp.x, ptComp.y, szComp.cx, szComp.cy, TRUE);
ShowWindow(hWndComp, SW_SHOWNOACTIVATE);
InvalidateRect(hWndComp, NULL, TRUE);
UpdateWindow(hWndComp);
这段代码实现功能没有问题,能更新并显示新的内容。但是有一个问题,就是每输入一个英文以后,窗口都会轻微的闪烁。我知道原因在于:这段代码的MoveWindow先用画刷把整个窗口刷白,然后最后一条语句UpdateWindow再把窗口新内容显示出来。
由于经历了一个旧内容删除(白画刷全部刷白),再写上新内容的过程,因此仔细观察,会出现短暂闪烁现象。
但是我看了别的输入法,比如极点五笔6.1版,也和我一样会闪烁。但是极点五笔7.13版和小鸭五笔,就没有这种闪烁现象。不知是如何做到的?
再看大公司的产品——搜狗拼音,发现也没有闪烁现象,大家可以仔细观察,输入一部分拼音以后,再多输入一个,原来的内容稳定不变,并没有闪烁现象。
它们是如何做到不闪烁的?
------解决方案--------------------
用双缓冲技术来显示,内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,
我有一个输入法,窗口在更新的时候用的是如下代码:
MoveWindow(hWndComp, ptComp.x, ptComp.y, szComp.cx, szComp.cy, TRUE);
ShowWindow(hWndComp, SW_SHOWNOACTIVATE);
InvalidateRect(hWndComp, NULL, TRUE);
UpdateWindow(hWndComp);
这段代码实现功能没有问题,能更新并显示新的内容。但是有一个问题,就是每输入一个英文以后,窗口都会轻微的闪烁。我知道原因在于:这段代码的MoveWindow先用画刷把整个窗口刷白,然后最后一条语句UpdateWindow再把窗口新内容显示出来。
由于经历了一个旧内容删除(白画刷全部刷白),再写上新内容的过程,因此仔细观察,会出现短暂闪烁现象。
但是我看了别的输入法,比如极点五笔6.1版,也和我一样会闪烁。但是极点五笔7.13版和小鸭五笔,就没有这种闪烁现象。不知是如何做到的?
再看大公司的产品——搜狗拼音,发现也没有闪烁现象,大家可以仔细观察,输入一部分拼音以后,再多输入一个,原来的内容稳定不变,并没有闪烁现象。
它们是如何做到不闪烁的?
------解决方案--------------------
用双缓冲技术来显示,内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,