获取 SFML window 的 HWND 和 HInstance?

Getting HWND and HInstance of SFML window?

我找不到任何相关信息。给定一个用 SFML 创建的 window(假设当然是 Windows):

sf::Window window(sf::VideoMode(800, 600), "My window");

是否可以得到创建的实际HWND和HInstancewindow?一些getter?或者也许是一个巧妙的技巧?

类似于:

window.getHWND()
window.getHInstance()

会很理想,但它不存在。任何建议表示赞赏。

更新

这不是 的副本,因为我特别询问如何检索 SFML window 的 HWND 和 HInstance。不是如何将 Vulkan 与 SFML 集成。因此,已经具有交换链的 SFML window 的问题与这个问题无关,与另一个问题无关。我只是包括了上下文以防有人想知道。 抱歉造成混淆

您要查找的是 sf::Window::getSystemHandle(),它将 return 变成 sf::WindowHandle,它取决于平台并且在 Windows 上它基本上是 HWND.

要获取您的 HINSTANCE,请使用您自己的 WinMain() 入口点或调用 GetModuleHandle(NULL);,只要您不是在编写库。

这实际上是 的副本,但作为 XY 问题提出。

OpenGL 似乎是 SFML 的硬依赖。我 假设 SFML 立即调用 SetPixelFormat,并在其上创建 OpenGL 交换链(即 "context")。

如果是这样,那么它就无法在 Vulkan 中使用。如果它有效,那只是因为未定义的行为,或者因为不兼容的 Vulkan 实现。

Vulkan 规范中有两个地方对此进行了讨论。

首先,VK_KHR_win32_surface 附录中的第 2) 期彻底讨论了它。总之,它说:

Uses of a window object by multiple graphics APIs results in undefined behavior.

其次在 vkCreateSwapchainKHR 行为中它说:

If the native window referred to by surface is already associated with a non-Vulkan graphics API surface, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR must be returned.