2016-07-12 83 views
1

我非常新到C++,我下面的教程「入門Direct3D的」從directxtutorial.com我用尼科考皮的福爾康教程'youtube link'創建窗口獲取HWND支持Direct3D初始化

,但我不使用福爾康在這裏。當前項目有win32窗口和glfw窗口。

DXTutorial有這個void函數:void initD3D(HWND hWnd) {} 我想知道如何獲得我正在使用的當前窗口(win32或glfw)的句柄。

Win32的窗口是這樣的:http://pastebin.com/P54cX6gr

和GLFW窗口是這樣的:http://pastebin.com/HD0Yxk2S

我跑出來的鏈接。

+1

首先,你爲什麼要爲directX使用glfw(openGL loader)窗口? –

+0

「win32或glfw」,我現在可以創建這兩種類型的窗口。我爲未來的渲染器添加了GLFW(OpenGL,Vulkan)。 – Pineapple

回答

0

您可以使用glfwGetWin32Window從GLFW窗口獲取Windows窗口句柄。

如果您想直接使用WinAPI,那麼當您爲該窗口註冊WindowProc時,傳遞給它的第一個參數是窗口句柄。然後您可以使用WM_CREATE事件來處理初始化。

+0

因此,如果我添加'case WM_CREATE',我該如何獲取渲染器的句柄?渲染器有它自己的類。和windows一樣。 – Pineapple

+0

@Pineapple你需要使某處的參考可用。無論是從範圍外還是使用'GetWindowLongPtr(hWnd,GWLP_USERDATA);',預先在用戶數據中存儲指向該呈現器的指針。 –

+0

在window_win32.cpp的第15行有'GetWindowLongPtrW(hWnd,GWLP_USERDATA));',並且在第88行'SetWindowLongPtr(_win32_window,GWLP_USERDATA,(LONG_PTR)this);'Renderer頭文件看起來像這樣[link] (http://pastebin.com/Q1JCVkbc)和cpp文件[鏈接](http://pastebin.com/BGPQ6UtY) – Pineapple