imgui的使用
首先可以看看imgui的目录结构:
backends中的文件:
这里举例在一个简单的工程中使用imgui。
首先下图中框中的文件就是从上述的两个图中复制过来的。原本的工程中只有一个Transformation.cpp
。
-
包含头文件
#include "imgui/imgui.h" #include "imgui/imgui_impl_win32.h" #include "imgui/imgui_impl_dx11.h"
-
在进入消息循环之前
// Setup Dear ImGui context IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); io.ConfigFlags |= ImGuiConfigFlags_NavEnableSetMousePos; // Setup Dear ImGui style ImGui::StyleColorsDark(); // Setup Platform/Renderer backends ImGui_ImplWin32_Init(g_hWnd); ImGui_ImplDX11_Init(g_pDevice.Get(), g_pContext.Get());
-
在DX11 Render一帧图像之前
// Start the Dear ImGui frame ImGui_ImplDX11_NewFrame(); ImGui_ImplWin32_NewFrame(); ImGui::NewFrame(); //这里可以使用imgui创建出很多的窗口。。。
-
在Draw之后Present之前
ImGui::Render(); ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); // Present our back buffer to our front buffer g_pSwapChain->Present(1, 0);
至此,imgui
创建的窗口就能显示在界面上了,但是有个问题就是鼠标去拖动这些窗口的时候是没有用的。这是因为imgui
没有获取到窗口的拖动消息,所以导致窗口不能拖动。解决这个的办法就是在消息处理函数lpfnWndProc
里面加上:
ImGui_ImplWin32_WndProcHandler(hWnd, message, wParam, lParam);
这个函数哪里来的呢?这个是imgui_impl_win32.cpp
文件中实现的,但是在头文件里面没有声明,里面注释写的是让我们在使用的地方使用extern
声明一下。
加上这个之后一切就完美了。
- 原文作者:Binean
- 原文链接:https://bzhou830.github.io/post/20210710imgui%E7%9A%84%E4%BD%BF%E7%94%A8/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。