gpt4 book ai didi

.net - WM_SETREDRAW 和失去 z 顺序/焦点

转载 作者:行者123 更新时间:2023-12-04 05:58:15 25 4
gpt4 key购买 nike

我有一个带有皮肤库 (Devexpress) 和 MDI 父窗体的 .NET 应用程序。

添加子表单时,我使用 WM_SETREDRAW 出于性能原因禁用绘画。

但是,设置 后WM_SETREDRAW 再次拨到 1 并调用 刷新 在 MDI 父级上,主窗体失去了它的 z 顺序并位于我桌面的背景上。

我必须调用前线 关注 然后,但仍有很短的时间段(<1s)我的应用程序对用户“消失”。

有没有更好的方法来禁用重绘但保持表单可见?

最佳答案

我怀疑问题来自 the documentation 中的这句话:

If the application sends the WM_SETREDRAW message to a hidden window, the window becomes visible (that is, the operating system adds the WS_VISIBLE style to the window).



a hidden window is effectively disabled (虽然它仍然可以处理消息,但它不能接收用户输入),这会导致您与启用和禁用窗口的正确顺序发生冲突。当当前聚焦的窗口被禁用(因此失去焦点)时,焦点必须移到某个地方,因为它不可能无处可去。

如果没有看到代码,很难准确地说出你的情况发生了什么。我也不能完全确定您是否发送 WM_SETREDRAW给 MDI 父级或 MDI 子级的消息。但我可以说,皮肤库因搞砸事情并导致噩梦般的错误而臭名昭著。首先问问自己你是否真的需要这样的东西,以及它是否真的值得努力。

我还不得不质疑潜在的动机:

When I add child forms, I use WM_SETREDRAW to disable painting for performance reasons.



添加子表单时不应该有任何绘画或性能问题,假设您在表单的构造函数内完成所有初始化,而不是其他一些方法。这可确保在显示表单之前正确初始化所有内容,并且无需多次重绘。一切都只绘制一次,第一次显示表单,这与 WM_SETREDRAW 的理想情况下发生的情况完全相同。 :启用重绘后它只会被绘制一次。

关于.net - WM_SETREDRAW 和失去 z 顺序/焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248553/

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