簡體   English   中英

獲取SFML窗口的HWND和HInstance?

[英]Getting HWND and HInstance of SFML window?

我一直無法找到任何關於此的信息。 給定一個用 SFML 創建的窗口(假設當然是在 Windows 上):

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

是否可以獲取創建窗口的實際 HWND 和 HInstance? 一些吸氣劑? 或者也許是一個巧妙的黑客?

就像是:

window.getHWND()
window.getHInstance()

將是非常理想的,但它不存在。 任何建議表示贊賞。

更新

這不是這個問題的重復,因為我特別詢問如何檢索 SFML 窗口的 HWND 和 HInstance。 不是如何將 Vulkan 與 SFML 集成。 因此,已經擁有交換鏈的 SFML 窗口的問題與這個問題無關,與另一個問題無關。 我只是包括上下文以防有人想知道。 很抱歉造成混亂

你要找的是sf::Window::getSystemHandle() ,它將返回一個sf::WindowHandle ,它是平台相關的,在 Windows 上它基本上是HWND

要獲得HINSTANCE ,請使用您自己的WinMain()入口點或調用GetModuleHandle(NULL); 只要你不寫圖書館。

這實際上是將 Vulkan 與 SFML 一起使用的副本 ,但被問為 XY 問題。

OpenGL 似乎是 SFML 的硬依賴。 假設SFML 立即調用SetPixelFormat ,並在其上創建 OpenGL 交換鏈(即“上下文”)。

如果是這樣,那么它就無法在 Vulkan 中使用。 如果它有效,那只是因為未定義的行為,或者因為不合規的 Vulkan 實現。

Vulkan 規范中有兩個地方討論了它。

首先, VK_KHR_win32_surface附錄中的 Issue 2) VK_KHR_win32_surface進行了徹底的討論。 總之它說:

多個圖形 API 使用窗口對象會導致未定義的行為。

其次在vkCreateSwapchainKHR行為中它說:

如果surface引用的本機窗口已與非 Vulkan 圖形 API 表面關聯, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR必須返回VK_ERROR_NATIVE_WINDOW_IN_USE_KHR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM