c++ - 从隐藏变为可见时,如何阻止窗口短暂地重新出现在其最后可见的位置?

标签 c++ windows winapi windows-7 directx

我有一个显示视频的非全屏 DirectX 窗口,出于应用目的,我需要四处移动,有时需要以编程方式从隐藏/可见状态更改。 从隐藏变为可见时,有时可能需要将窗口移动到新位置才能显示。

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

然后我调用 ShowWindow(hWnd, SW_SHOW) 让窗口出现在新位置。这工作正常,除了窗口短暂出现在它出现在新的正确位置之前最后可见的位置。

我已经尝试使用替代方案 MoveWindow(将 repaint-option 设置为 false)和 GetWindowPlacement 以及 SetWindowPlacement(带有适当的标志) , 但他们给出了相同的结果。

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

最佳答案

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

关于c++ - 从隐藏变为可见时,如何阻止窗口短暂地重新出现在其最后可见的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533336/

相关文章:

c++ - 覆盖子类中的返回类型

c++ - 在 Stack 实现中使用哪个智能指针?

c++ - 错误 :ISO C++ forbids comparison between pointer and integer

windows - 如何使用 Windows 命令提示符删除空文件夹?

c# - 如何在 C# 中从工作线程发布 UI 消息

c - 如果我打算通过多个进程访问文件的多个部分,使用 CreateFileMapping 和 MapViewOfFile 的正确方法是什么?

c++ - MFC:从另一个线程调用 CWnd 方法是否安全?

windows - 如何在 Windows Phone 7 中绑定(bind)来自 xml 文件的动态多列表数据?

windows - RegSvr32 退出代码文档?

c# - 如何通过安装驱动程序来检查Windows是否繁忙?