获取SFML窗口的HWND和HInstance吗?

时间:2018-10-24 10:17:21

标签: c++ winapi sfml

我一直找不到任何有关此的信息。给定一个使用SFML创建的窗口(假设课程在Windows上):

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

是否可以获得所创建窗口的实际HWND和HInstance?一些吸气剂?还是整洁的骇客?

类似的东西:

window.getHWND()
window.getHInstance()

会非常理想,但确实存在。任何建议表示赞赏。

更新

这不是this question的副本,因为我特别询问如何检索SFML窗口的HWND和HInstance。不是如何将Vulkan与SFML集成。因此,已经具有交换链的SFML窗口问题与该问题无关,而与其他问题无关。我只是将上下文包括在内,以防有人怀疑。 很抱歉造成混淆

2 个答案:

答案 0 :(得分:2)

您要查找的是sf::Window::getSystemHandle(),它将返回一个sf::WindowHandle,它取决于平台,在Windows上基本上是HWND

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

答案 1 :(得分:0)

这实际上是Using Vulkan with SFML?的副本,但被询问为XY问题。

OpenGL似乎是SFML的硬依赖性。我假设,SFML立即调用SetPixelFormat,并在其之上创建OpenGL交换链(即“上下文”)。

如果是这样,那么它就不能在Vulkan中使用。如果可行,那仅仅是因为未定义的行为,或者是因为不符合规定的Vulkan实施。

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

首先,VK_KHR_win32_surface附录中的第2期)对其进行了详细介绍。总之,它说:

  

多个图形API使用窗口对象会导致未定义的行为。

其次是vkCreateSwapchainKHR行为:

  

如果surface所引用的本机窗口已经与非Vulkan图形API表面相关联,则必须返回VK_ERROR_NATIVE_WINDOW_IN_USE_KHR