当窗口从隐藏变为可见时,如何阻止其在最后一个可见位置短暂重新出现

How can I stop a window from briefly reappearing at its last visible position when going from hidden to visible?

本文关键字:最后一个 位置 新出现 何阻止 隐藏 窗口      更新时间:2023-10-16

我有一个显示视频的非全屏DirectX窗口,出于应用程序的目的,我需要在其中移动,有时还需要通过编程方式从隐藏/可见更改。当窗口从隐藏变为可见时,有时可能需要将其移动到新位置才能显示。

我用ShowWindow(hWnd, SW_HIDE)隐藏窗口。当我想在新的位置再次显示窗口时,我首先使用新的坐标和SWP_NOREDRAWSWP_NOZORDER标志用SetWindowPos移动它(我不想打乱Z顺序)。

然后我调用ShowWindow(hWnd, SW_SHOW)以使窗口出现在新位置。除了窗口在其新的正确位置出现之前短暂出现在最后一次可见的位置之外,此操作效果良好。

我尝试过将备选方案MoveWindow(重新绘制选项设置为false)和GetWindowPlacementSetWindowPlacement(具有适当的标志)一起使用,但它们给出了相同的结果。

从隐藏变为可见时,如何强制窗口显示在正确的位置?

发现问题不是Windows API或DirectX的错误,而是解码器处理方式中的一个棘手错误。窗口的位置及其可见性状态基于通过视频解码器的帧用户数据中的值。当解码器停止接收输入数据时,即与编码器的网络连接断开时,它也将停止对解码帧进行回调,数据仍在其"管道"中。当输入数据再次到达解码器时,它会吐出一些"卡住"的帧,其中包含不再有效的用户数据。