如何让imgui绘制在指定的一个窗体中
时间: 2023-11-27 16:50:27 浏览: 288
要让 imgui 绘制在指定的一个窗体中,需要使用 ImGui::SetNextWindowViewport() 函数来设置 imgui 的视口,使其与指定窗体的视口相同。然后,使用 ImGui::Begin() 函数来开始一个新的 imgui 窗口,并在其中绘制需要的内容。
下面是一个使用 imgui 绘制在指定窗体中的示例代码:
```cpp
#include <imgui.h>
#include <imgui_impl_glfw.h>
#include <imgui_impl_opengl3.h>
#include <GLFW/glfw3.h>
int main()
{
// 初始化 GLFW 和 OpenGL 窗口
glfwInit();
GLFWwindow* window = glfwCreateWindow(640, 480, "My Window", NULL, NULL);
glfwMakeContextCurrent(window);
// 初始化 imgui
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init("#version 130");
// 主循环
while (!glfwWindowShouldClose(window))
{
// 处理事件
glfwPollEvents();
// 开始新的帧
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
// 设置 imgui 视口与窗口视口相同
ImGui::SetNextWindowViewport(glfwGetPrimaryMonitor()->GetHandle());
// 开始一个新的 imgui 窗口
ImGui::Begin("My Window");
// 在 imgui 窗口中绘制内容
ImGui::Text("Hello, world!");
// 结束 imgui 窗口
ImGui::End();
// 渲染 imgui
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
// 交换缓冲区
glfwSwapBuffers(window);
}
// 清理 imgui
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
// 清理 GLFW 和 OpenGL 窗口
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
```
在这个示例代码中,我们首先使用 ImGui::SetNextWindowViewport() 函数将 imgui 视口设置为与主显示器的视口相同。然后,我们使用 ImGui::Begin() 函数来开始一个新的 imgui 窗口,并在其中绘制了一个简单的文本。最后,我们使用 ImGui::Render() 函数来渲染 imgui,并使用 ImGui_ImplOpenGL3_RenderDrawData() 函数将绘制的数据渲染到 OpenGL 缓冲区中。
阅读全文