gpt4 book ai didi

c++ - Windows 7 中 WS_CLIPCHILDREN 和 InvalidateRect 的行为

转载 作者:太空狗 更新时间:2023-10-29 21:09:00 25 4
gpt4 key购买 nike

为了减少闪烁,我使用 WS_CLIPCHILDREN 标志创建我的父窗口,并在 WM_SIZE 事件期间调用 InvalidateRect。这种方法在 Windows XP 中运行良好。但是,我最近开始在 Windows 7 上编程,现在在调整窗口大小时遇到​​渲染问题。调整窗口大小时,其内容不会刷新,直到我执行强制重绘的操作,例如最小化和恢复窗口。

我已经尝试通过 UpdateWindow 调用跟进 InvalidateRect,但没有效果。

有谁知道如何正确地做到这一点?

更新
我找到了一个解决方法:调用 InvalidateRect(childHWND, NULL, FALSE)在所有子窗口上紧跟 InvalidateRect(parentHWND, NULL, TRUE) 在父窗口上修复渲染问题,而不会引入明显的闪烁。

其他建议仍然欢迎!

更新 2
我尝试了 RedrawWindow(hwnd, 0, 0, RDW_INVALIDATE | RDW_ALLCHILDREN) 但这导致了一些渲染问题(遗留像素)。

更新 3
RedrawWindow 在后跟 InvalidateRect(hwnd, NULL, TRUE) 时起作用。谢谢@interjay!

最佳答案

您可以尝试调用RedrawWindow ,传递标志 RDW_INVALIDATERDW_ALLCHILDREN

编辑:

要重绘背景,可以添加 RDW_ERASE。如果你想重绘父级而不是子级的背景,调用 RedrawWindowInvalidateRect(...,TRUE)

关于c++ - Windows 7 中 WS_CLIPCHILDREN 和 InvalidateRect 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com