【发布时间】:2018-09-14 08:43:35
【问题描述】:
我正在实现一个视频播放器 API sw,它为给定的 Rtsp 地址播放视频。 使用 API 的软件将窗口句柄传递给 API,API 在其上渲染视频。 我尝试使用 SDL 渲染帧,没关系。但是当我使用 SDL_DestroyWindow() 销毁 SDL_Window 时,其他软件传递其句柄的本机窗口也被销毁。 然后我评论了 SDL_DestroyWindow 部分,但是这次重用相同的本机窗口句柄是一个问题。当其他软件通过 API 传递相同的本机窗口句柄并且我使用 SDL_CreateWindowFrom() 创建一个 SDL_Window 时,其他软件无法获取本机窗口点击事件。 有没有办法将 SDL_Window 再次转换为本机窗口?或者您对我的问题有什么解决方案建议?
【问题讨论】:
-
您的目标操作系统和 SDL 版本是什么? SDL 不会破坏通过 SDL_CreateWindowFrom 传递的系统窗口。
-
操作系统是Windows。 SDL 版本为 2.0.4
-
是什么让你认为它会破坏窗口?检查code 确认 SDL 只会破坏它自己创建的窗口。你能在
DestroyWindowwindows 函数上设置断点并检查它是从哪里调用的吗? -
正如你所说的源代码似乎没问题。现在我编写了一个基本的.net 代码,它将面板句柄传递给 API。当我在第一次视频渲染后销毁句柄时,第二次无法渲染视频。但是当我调试代码时,我可以验证 SDL 可以创建 SDL_Window、SDL_Texture 和 SDL_Renderer。一切似乎都很好,但没有渲染。如果我不销毁句柄视频被渲染但我无法获得面板点击事件。
-
好的,虽然 SDL 从不破坏窗口,但实际上 hides it。您可以使用例如再次显示它
ShowWindow(handle, SW_SHOW)在 Windows 上。