用 ImGui 快速搭一个 C++ 调试面板
如果你写的是 C++,又只是想给程序补一个调试窗口、参数面板或者工具界面,ImGui 往往比传统 GUI 框架省事得多。它走的是即时模式,不强调复杂的控件生命周期,也不要求你先搭一整套窗口类和回调体系。界面基本就是在渲染循环里'画'出来的,写法更接近声明当前帧要什么,而不是维护一堆状态对象。
这类库最适合的场景也很明确:游戏引擎、编辑器插件、内部工具、参数调试面板。它不是拿来替代 Photoshop 或大型桌面应用框架的,强行拿它做那种东西,后面一定会别扭。要是目标只是'快点有个能用的界面',ImGui 很顺手。
环境准备与项目初始化
ImGui 本身只负责生成绘制指令,真正把窗口、输入和图形上下文跑起来,还得靠后端。常见组合是 GLFW + OpenGL 3,或者 SDL2 + 其他渲染器。这里先用 GLFW 和 OpenGL 3,集成成本低,资料也多。
先把 ImGui 源码拉下来,仓库在这里:
https://github.com/ocornut/imgui
实际需要的核心文件不多,通常就是 imgui.h、imgui.cpp,再加上对应后端实现文件。下面这份 CMake 配置是一个比较常见的起点:
cmake_minimum_required(VERSION 3.10)
project(MyImGuiApp)
set(CMAKE_CXX_STANDARD 17)
find_package(OpenGL REQUIRED)
find_package(glfw3 3.3 REQUIRED)
add_subdirectory(libs/imgui)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL glfw imgui)
接下来先把窗口和渲染循环搭起来,不急着写界面逻辑。先确认程序能稳定开窗、拿到 OpenGL 上下文、跑起来再说。这个顺序很朴素,但能少掉很多没必要的排错时间。
#include <iostream>
#include <GLFW/glfw3.h>
#include <glad/glad.h>
#include "imgui.h"
#include "backends/imgui_impl_glfw.h"
#include "backends/imgui_impl_opengl3.h"
int main() {
if (!glfwInit()) {
std::cerr << "Failed to initialize GLFW" << std::endl;
return -1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, );
(GLFW_CONTEXT_VERSION_MINOR, );
(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = (, , , , );
(window == ) {
std::cerr << << std::endl;
();
;
}
(window);
();
(!((GLADloadproc)glfwGetProcAddress)) {
std::cerr << << std::endl;
;
}
ImGui::();
ImGuiIO& io = ImGui::();
()io;
ImGui::();
(window, );
();
(!(window)) {
();
();
();
ImGui::();
ImGui::();
ImGui::();
ImGui::();
ImGui::();
display_w, display_h;
(window, &display_w, &display_h);
(, , display_w, display_h);
(, , , );
(GL_COLOR_BUFFER_BIT);
(ImGui::());
(window);
}
();
();
ImGui::();
(window);
();
;
}

