如何在C++结合GLFW的开发场景中移除ImGui窗口的标题栏
移除ImGui窗口标题栏的实现方法
ImGui窗口的标题栏显示由窗口标记位控制,和你使用的GLFW后端没有绑定关系,可按以下需求选择实现方式:
针对单个窗口移除标题栏
在调用ImGui::Begin()创建窗口时,传入ImGuiWindowFlags_NoTitleBar标记即可:
// 第二个参数为窗口关闭按钮的控制指针,不需要可传nullptr ImGui::Begin("Demo Window", nullptr, ImGuiWindowFlags_NoTitleBar); // 窗口内容逻辑写在这里 ImGui::End();
如果需要同时叠加其他窗口属性,用按位或运算符拼接标记即可,比如同时移除标题栏、禁止窗口缩放、隐藏窗口边框:
ImGui::Begin("Demo Window", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoDecoration);
注意:
ImGuiWindowFlags_NoDecoration是组合标记,本身已经包含了NoTitleBar、NoResize、NoScrollbar、NoCollapse四个属性,适合需要完全自定义窗口外观的场景。
全局默认移除所有窗口的标题栏
如果你希望项目内所有ImGui窗口默认都不带标题栏,可以封装自定义的窗口创建函数统一加标记,无需每次手动传参:
// 自定义的无标题栏窗口创建接口 bool CustomImGuiBegin(const char* name, bool* p_open = nullptr, ImGuiWindowFlags extra_flags = 0) { return ImGui::Begin(name, p_open, ImGuiWindowFlags_NoTitleBar | extra_flags); } // 调用示例 CustomImGuiBegin("Demo Window"); // 窗口内容 ImGui::End();
补充:无标题栏窗口的拖动实现
移除标题栏后默认的窗口拖动功能会失效,如果需要保留拖动能力,可以在窗口内容开头加入以下代码,实现点击窗口任意空白区域即可拖动:
if (ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows) && ImGui::IsMouseDragging(ImGuiMouseButton_Left)) { ImGui::SetWindowPos(ImGui::GetWindowPos() + ImGui::GetIO().MouseDelta); }
内容的提问来源于stack exchange,提问作者nimsara-c
相关产品推荐
相关产品推荐

