ImGui窗口切换实现:点击按钮如何关闭对应窗口并切换显示?
解决ImGui窗口切换逻辑问题
你的代码已经具备基本的切换逻辑,但存在两个可优化的点:按钮判断可以更严谨,窗口关闭参数的设置可能导致状态混乱。以下是调整后的实现,完全满足点击按钮时互斥打开对应窗口的需求:
bool showProjects = true; bool showVersions = false; // 标签控制窗口 ImGui::Begin("Tabs", nullptr, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); if (ImGui::Button("Projects")) { showProjects = true; showVersions = false; } else if (ImGui::Button("Editor Versions")) { showProjects = false; showVersions = true; } ImGui::End(); // 项目列表窗口 if (showProjects) { // 传nullptr禁止用户手动关闭窗口,完全由按钮控制状态 ImGui::Begin("Projects", nullptr, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); // 此处添加项目窗口的UI内容 ImGui::End(); } // 编辑器版本窗口 if (showVersions) { ImGui::Begin("Versions", nullptr, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize); // 此处添加版本窗口的UI内容 ImGui::End(); }
关键调整说明:
- 变量名语义化:把
projects/versions改为showProjects/showVersions,更清晰表达变量的作用。 - 按钮判断优化:用
else if替代第二个独立if,保证同一帧只有一个按钮的切换逻辑执行,代码更严谨。 - 窗口关闭控制:将
ImGui::Begin的第二个参数设为nullptr,禁止用户通过窗口自带的关闭按钮修改状态,确保窗口显示/隐藏完全由你的切换按钮控制。如果需要允许用户手动关闭窗口,可以保留原有的指针参数,但要在切换逻辑中额外处理状态同步(比如用户关闭Projects窗口时自动打开Versions窗口)。
内容的提问来源于stack exchange,提问作者Sebwazhere
相关产品推荐
相关产品推荐

