我有一个显示视频的非全屏 DirectX 窗口,出于应用目的,我需要四处移动,有时需要以编程方式从隐藏/可见状态更改。 从隐藏变为可见时,有时可能需要将窗口移动到新位置才能显示。
我用 ShowWindow(hWnd, SW_HIDE)
隐藏窗口。
当我想在新位置再次显示窗口时,我首先使用新坐标和 SWP_NOREDRAW
和 SWP_NOZORDER
标志通过 SetWindowPos
移动它(我不想弄乱 Z 顺序)。
然后我调用 ShowWindow(hWnd, SW_SHOW)
让窗口出现在新位置。这工作正常,除了窗口短暂出现在它出现在新的正确位置之前最后可见的位置。
我已经尝试使用替代方案 MoveWindow
(将 repaint-option 设置为 false)和 GetWindowPlacement
以及 SetWindowPlacement
(带有适当的标志) , 但他们给出了相同的结果。
当从隐藏变为可见时,如何强制窗口出现在正确的位置?
最佳答案
原来问题不是 Windows API 或 DirectX 的错误,而是解码器处理方式中的一个棘手错误。 窗口的放置及其可见性状态基于通过视频解码器传递的帧用户数据中的值。当解码器停止接收输入数据时,发生在与编码器的网络连接断开时,它也会停止为解码帧提供回调,数据仍在其“管道”中。当输入数据再次到达解码器时,它会吐出一些“卡住”的帧,用户数据不再有效。
关于c++ - 从隐藏变为可见时,如何阻止窗口短暂地重新出现在其最后可见的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533336/