为了减少闪烁,我使用WS_CLIPCHILDREN标志创建了我的父窗口,并在WM_SIZE事件期间调用了InvalidateRect。这种方法在Windows XP中运行良好。不过,我最近开始在Windows 7上编程,并且在调整窗口大小时我现在遇到渲染问题。调整窗口大小时,其内容不会刷新,直到我执行强制重绘的操作,例如最小化和恢复窗口。Windows 7中WS_CLIPCHILDREN和InvalidateRect的行为
我试着用UpdateWindow调用跟进InvalidateRect,但没有任何效果。
有谁知道如何正确地做到这一点?
更新
我找到了一个解决办法:在调用InvalidateRect(childHWND, NULL, FALSE)
上的所有子窗口,然后父窗口上一个InvalidateRect(parentHWND, NULL, TRUE)
修复,而不会引入明显的闪烁渲染问题。
其他建议仍然欢迎!
更新2
我试过RedrawWindow(hwnd, 0, 0, RDW_INVALIDATE | RDW_ALLCHILDREN)
但导致一些渲染问题(左超过像素)。随后当被InvalidateRect(hwnd, NULL, TRUE)
更新3
的RedrawWindow工作。谢谢@interjay!
我希望有人在微软发布一个清晰,简洁,如何与任何版本的操作系统兼容的W/O闪烁调整大小! – Mordachai 2009-12-16 14:40:06
我修复了我的答案。如果您再次回复我,请在我的回答下添加评论,否则我可能看不到它。 – interjay 2009-12-16 15:27:57