ImGUI

文档说明

  • ImGui库是一个强大的C++GUI开源库,可用于开发多种可视化程序

窗口

创建窗口

  • 源码声明
1
bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)  //创建窗口
1
void ImGui::End()  //结束
  • name 窗口名
  • p_open 布尔指针,控制窗口显示
  • ImGuiWindowFlags 标志

ImGuiWindowFlags

Flag 窗口没有特殊行为或外观。
ImGuiWindowFlags_None 窗口没有特殊行为或外观。
ImGuiWindowFlags_NoTitleBar 窗口没有标题栏。
ImGuiWindowFlags_NoResize 禁用窗口的调整大小功能。
ImGuiWindowFlags_NoScrollbar 隐藏水平和/或垂直滚动条。
ImGuiWindowFlags_NoCollapse 窗口不能通过双击其标题栏或按钮来折叠/展开。
ImGuiWindowFlags_AlwaysAutoResize 窗口总是自动调整大小以适应其内容。
ImGuiWindowFlags_NoBringToFrontOnFocus 当窗口获得焦点时,不将其带到其他窗口前面。
ImGuiWindowFlags_NoMove 禁用窗口的移动功能。
ImGuiWindowFlags_NoBackground 窗口没有背景色(仅显示内容,没有边框或背景)。
ImGuiWindowFlags_NoSavedSettings 不保存窗口的位置、大小或折叠状态到用户配置中。
ImGuiWindowFlags_MenuBar 在窗口的顶部有一个菜单栏。
ImGuiWindowFlags_HorizontalScrollbar 始终显示水平滚动条(即使内容不需要滚动)。
ImGuiWindowFlags_NoFocusOnAppearing 当窗口首次出现时,不给予它焦点。
ImGuiWindowFlags_NoNavInputs 窗口不接收导航输入(如键盘上的箭头键或 Tab 键)。

常用API

实现 声明 详细
文本 ImGui::Text(const char* fmt) 1.fmt文本
显示带有标签的文本 ImGui::LabelText(const char* label, const char* fmt, ...)
按钮 ImGui::Button(const char* label, const ImVec2& size_arg) 1.lable:文本
2.size_arg :大小
创建一个文本输入框 ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL)
创建一个浮点数滑动条 ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0)
建一个整数滑动条 ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0)
创建一个复选框 ImGui::Checkbox(const char* label, bool* v)
创建一个单选按钮(通常与ImGui::RadioButton的连续调用结合使用,以创建单选按钮组) ImGui::RadioButton(const char* label, bool active)
创建一个列表框 ImGui::ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1)
创建一个RGB颜色选择器 ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0)
创建一个树节点 ImGui::TreeNode(const char* label)
创建一个进度条 ImGui::ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL)
创建一个线图 ImGui::PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MIN, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float))

样式和布局

  • ImGui::PushStyleColor(ImGuiCol idx, ImU32 col): 推送颜色样式到栈中。
  • ImGui::PopStyleColor(int count = 1): 弹出颜色样式。
  • ImGui::PushStyleVar(ImGuiStyleVar var_idx, float val): 推送样式变量到栈中。
  • ImGui::PopStyleVar(int count = 1): 弹出样式变量。
  • ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0): 设置下一个窗口的大小。
  • ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0): 设置下一个窗口的位置。

其他常用函数

  • ImGui::OpenPopup(const char* str_id): 打开一个弹出窗口。
  • ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0): 开始一个弹出窗口。
  • ImGui::EndPopup(): 结束弹出窗口的绘制。
  • ImGui::IsItemHovered(): 检查当前鼠标是否悬停在某个项上。
  • ImGui::IsItemActive(): 检查当前项是否处于活动状态(如被拖动、编辑等)

除了之前提到的ImGui常用API外,还有一些其他的API和功能也值得注意:

文本输入和键盘处理

  • ImGui::InputTextMultiline(...): 创建一个支持多行文本的输入框。
  • ImGui::InputTextWithHint(...): 创建一个带有提示文本的输入框。
  • ImGui::KeyboardChar(...): 向ImGui传递一个键盘字符事件(通常用于处理键盘输入)。

选择器和列表

  • ImGui::Combo(...): 创建一个下拉选择器,允许用户从预定义的选项列表中选择一个。
  • ImGui::ListBoxHeader(...)ImGui::ListBoxFooter(...): 用于自定义列表框的渲染。

布局控制

  • ImGui::BeginGroup()ImGui::EndGroup(): 创建一个可以移动、缩放或隐藏的元素组。
  • ImGui::Indent(...)ImGui::Unindent(...): 增加或减少缩进级别,用于控制子元素的缩进。
  • ImGui::Columns(...)ImGui::NextColumn() 等:用于创建列布局。

弹出窗口和工具提示

  • ImGui::BeginTooltip()ImGui::EndTooltip(): 创建一个工具提示(tooltip)。
  • ImGui::SetTooltip(...): 为当前悬停的项设置工具提示文本。

拖放和滑动

  • ImGui::DragFloat(...), ImGui::DragInt(...) 等:用于创建可以拖放的滑块。
  • ImGui::SliderScalar(...): 创建一个可以拖放的滑块,支持各种数据类型。

菜单和上下文菜单

  • ImGui::BeginMainMenuBar()ImGui::EndMainMenuBar(): 创建主菜单栏。
  • ImGui::BeginMenu(...)ImGui::EndMenu(): 创建一个下拉菜单。
  • ImGui::BeginPopupContextItem(...)ImGui::BeginPopupContextWindow(...): 创建与特定项或窗口关联的上下文菜单。

图像和绘图

  • ImGui::Image(...): 显示一个图像。
  • ImGui::ImageButton(...): 创建一个可以点击的图像按钮。
  • ImGui::GetWindowDrawList(): 获取当前窗口的绘图列表,用于自定义绘图。

工具和实用程序

  • ImGui::ShowDemoWindow(...): 显示一个演示窗口,其中包含ImGui的所有功能和控件的示例。
  • ImGui::ShowMetricsWindow(...): 显示一个窗口,其中包含关于ImGui渲染性能的详细统计信息。
  • ImGui::StyleColorsDark(...), ImGui::StyleColorsClassic(...) 等:应用预定义的样式主题。

窗口标志和样式

  • ImGuiWindowFlags 枚举:包含用于控制窗口行为的多个标志。
  • ImGuiStyle 结构体:包含用于控制ImGui界面样式的多个字段。

这些只是ImGui库提供的一部分功能和API,具体的使用方法和效果请参考ImGui的官方文档和示例代码。

如窗口、标签页、按钮、文本框、进度条、滑块、输入框、树

控件

ImGui库提供了许多常用的控件,包括但不限于以下这些:

  1. 基本控件

    • Label:用于显示文本标签。
    • Text:用于显示文本内容。
    • Button:创建可点击的按钮。
    • Checkbox:创建复选框控件,用于表示开关状态。
    • Radio Button:创建单选按钮控件,用于从一组选项中选择一个。
    • Slider:创建滑动条控件,用于选择连续的值。
    • Drag:与Slider类似,但更侧重于拖拽操作来选择值。
  2. 输入控件

    • Input Text:创建文本框控件,用于输入文本。
    • Input Float, Input Int:创建用于输入浮点数或整数的控件。
  3. 列表和树形控件

    • List Box:创建列表框控件,用于显示可选项列表。
    • Tree:创建树形控件,用于展示层次结构的数据。
  4. 颜色选择器

    • Color Picker:允许用户选择颜色。
  5. 菜单和工具栏

    • Menu:创建下拉菜单。
    • Toolbar:创建工具栏,通常包含多个按钮或选项。
  6. 滚动条和滚动区域

    • Scrollbar:创建滚动条控件。
    • Scrolling Region:允许在滚动区域内显示大量内容。
  7. 弹出窗口和对话框

    • Popup:创建弹出窗口。
    • Modal Window:创建模态对话框,阻止用户与对话框之外的其他内容交互。
  8. 其他

    • Progress Bar:显示进度条。
    • Tab Bar:创建选项卡栏,用于在不同视图或页面之间切换。
    • Collapsing Header:可折叠的标题,通常用于组织相关内容。
    • ComboBox:组合框,结合了文本框和下拉列表的功能。
    • Image:显示图像。

请注意,ImGui库还在不断更新和发展中,可能会添加新的控件或改进现有控件的功能。因此,建议查阅最新的ImGui文档或源代码以获取最准确和完整的信息。