You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:48:03