使用说明:
效果如下

主要源码如下:
#include "imgui.h"
#include "backends/imgui_impl_sdl2.h"
#include "backends/imgui_impl_sdlrenderer2.h"
#include <SDL.h>
#include <iostream>
int main(int argc,char** argv) {
// SDL 初始化
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
std::cerr << "SDL_Init Error: " << SDL_GetError() << std::endl;
return -1;
}
// 创建 SDL2 窗口
SDL_Window* window = SDL_CreateWindow("ImGui Simple Example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 550, 400, SDL_WINDOW_SHOWN);
if (!window) {
std::cerr << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
return -1;
}
// 创建 SDL_Renderer
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!renderer) {
std::cerr << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
return -1;
}
// 设置 ImGui 上下文
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGui::StyleColorsDark(); // 使用暗色主题
// 设置 ImGui 渲染器和平台绑定
ImGui_ImplSDL2_InitForSDLRenderer(window,renderer);
ImGui_ImplSDLRenderer2_Init(renderer);
bool running = true;
bool show_dialog = false; // 控制对话框显示的变量
SDL_Event event;
while (running) {
// 处理 SDL 事件
while (SDL_PollEvent(&event)) {
ImGui_ImplSDL2_ProcessEvent(&event);
if (event.type == SDL_QUIT) {
running = false;
}
}
// 获取 SDL 窗口尺寸并设置 ImGui 窗口尺寸
int window_width, window_height;
SDL_GetWindowSize(window, &window_width, &window_height);
// 开始新的 ImGui 帧
ImGui_ImplSDLRenderer2_NewFrame();
ImGui_ImplSDL2_NewFrame();
ImGui::NewFrame();
// 创建一个铺满窗口的 ImGui 窗口
ImGui::Begin("Hello, ImGui!", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove);
// 强制设置窗口位置为原点
ImGui::SetWindowPos(ImVec2(0, 0), ImGuiCond_Always);
ImGui::SetWindowSize(ImVec2((float)window_width, (float)window_height));
ImGui::Text("Hello ImGui");
if (ImGui::Button("Show Dialog")) {
show_dialog = true;
}
if (ImGui::Button("Quit")) {
running = false;
}
ImGui::End();
// 显示对话框窗口
if (show_dialog) {
ImGui::OpenPopup("Dialog");
}
if (ImGui::BeginPopupModal("Dialog", NULL, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::Text("This is a simple dialog!");
if (ImGui::Button("Close")) {
show_dialog = false;
ImGui::CloseCurrentPopup();
}
ImGui::EndPopup();
}
// 渲染 ImGui
ImGui::Render();
SDL_RenderClear(renderer); // 清除渲染器
ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData(),renderer); // 绘制 ImGui 数据
SDL_RenderPresent(renderer); // 显示渲染结果
}
// 清理
ImGui_ImplSDLRenderer2_Shutdown();
ImGui_ImplSDL2_Shutdown();
ImGui::DestroyContext();
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}