【问题标题】:Get HWND for Direct3D init为 Direct3D 初始化获取 HWND
【发布时间】:2016-07-14 22:21:15
【问题描述】:

我是 C++ 的新手,我正在学习来自 directxtutorial.com 的教程“Direct3D 入门”

我已经使用 Niko Kauppi 的 Vulkan 教程 'youtube link' 创建窗口,但我这里没有使用 Vulkan。当前项目有win32窗口和glfw窗口。

DXTutorial 有这个 void 函数:void initD3D(HWND hWnd) {} 我想知道如何获取我正在使用的当前窗口的句柄( win32 或 glfw )。

win32窗口是这样的:http://pastebin.com/P54cX6gr

glfw 窗口是这样的:http://pastebin.com/HD0Yxk2S

我的链接用完了。

【问题讨论】:

  • 首先,你为什么要为 directX 使用 glfw(openGL 加载器)窗口?
  • “win32 或 glfw”,我目前可以创建这两种类型的窗口。我有 GLFW 用于将来可能添加的渲染器(OpenGL、Vulkan)。

标签: c++


【解决方案1】:

您可以使用glfwGetWin32Window 从 GLFW 窗口获取 Windows 窗口句柄。

如果你想直接使用WinAPI,当你为窗口注册WindowProc时,传递给它的第一个参数是窗口句柄。然后您可以使用WM_CREATE 事件来处理初始化。

【讨论】:

  • 那么,如果我添加“case WM_CREATE”,如何将句柄交给渲染器?渲染器有自己的类。窗户也一样。
  • @Pineapple 您需要以某种方式在此处提供参考。来自外部范围或GetWindowLongPtr(hWnd, GWLP_USERDATA);,预先在用户数据中存储指向该渲染器的指针。
  • window_win32.cpp的第15行有GetWindowLongPtrW(hWnd, GWLP_USERDATA));,第88行有SetWindowLongPtr(_win32_window, GWLP_USERDATA, (LONG_PTR)this); Renderer头文件是这样的link和cpp文件link
  • @Pineapple 不要误会我的意思;我很乐意为您提供帮助,但我不会为您编写代码。
  • 我不是那个意思,我只是不明白如何获取渲染器的窗口句柄,所以我认为提供代码链接有助于解释。我现在正在添加 OpenGL 渲染器(我更了解 GL,因为我之前在 C# 中搞砸过它),也许这有助于我弄清楚。
猜你喜欢
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多