【问题标题】:Destroy SDL_Window without destroying native window handle?在不破坏本机窗口句柄的情况下破坏 SDL_Window?
【发布时间】: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 只会破坏它自己创建的窗口。你能在DestroyWindow windows 函数上设置断点并检查它是从哪里调用的吗?
  • 正如你所说的源代码似乎没问题。现在我编写了一个基本的.net 代码,它将面板句柄传递给 API。当我在第一次视频渲染后销毁句柄时,第二次无法渲染视频。但是当我调试代码时,我可以验证 SDL 可以创建 SDL_Window、SDL_Texture 和 SDL_Renderer。一切似乎都很好,但没有渲染。如果我不销毁句柄视频被渲染但我无法获得面板点击事件。
  • 好的,虽然 SDL 从不破坏窗口,但实际上 hides it。您可以使用例如再次显示它ShowWindow(handle, SW_SHOW) 在 Windows 上。

标签: video rendering sdl-2


【解决方案1】:

正如 Keltar 所说,ShowWindow(handle, SW_SHOW) 解决了这个问题。由于 SDL 在调用 SDL_DestroyWindow() 时会隐藏窗口,因此应通过调用 ShowWindow(handle, SW_SHOW) 来显示窗口

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2011-12-29
    相关资源
    最近更新 更多