九.《Imgui》常用的控件 您所在的位置:网站首页 ImGui源码分析 九.《Imgui》常用的控件

九.《Imgui》常用的控件

2024-05-05 23:46| 来源: 网络整理| 查看: 265

源码所处位置

普通按钮

ImGui::Buttonstatic int clicked = 0;if (ImGui::Button("Button"))    clicked++;if (clicked & 1){    ImGui::SameLine();//同一行    ImGui::Text("Thanks for clicking me!");}

颜色按钮-压栈弹栈的方式设置按钮样式

for (int i = 0; i  0)        ImGui::SameLine();    ImGui::PushID(i);    ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i / 7.0f, 0.6f, 0.6f));    ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i / 7.0f, 0.7f, 0.7f));    ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i / 7.0f, 0.8f, 0.8f));    ImGui::Button("Click");    ImGui::PopStyleColor(3);    ImGui::PopID();}

单选按钮

选择控件改变变量

static int e = 0;ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();ImGui::RadioButton("radio c", &e, 2);

箭头按钮改变变量

// Use AlignTextToFramePadding() to align text baseline to the baseline of framed widgets elements// (otherwise a Text+SameLine+Button sequence will have the text a little too high by default!)// See 'Demo->Layout->Text Baseline Alignment' for details.//使用AlignTextToFramePadding()将文本基线与框架小部件元素的基线对齐//(否则,默认情况下,Text+SameLine+按钮序列的文本将有点太高!)ImGui::AlignTextToFramePadding();ImGui::Text("Hold to repeat:");ImGui::SameLine();// Arrow buttons with Repeater

IMGUI_DEMO_MARKER("Widgets/Basic/Buttons (Repeating)");static int counter = 0;float spacing = ImGui::GetStyle().ItemInnerSpacing.x;ImGui::PushButtonRepeat(true);//压入设置当前Button状态 //建议还是用ImGui::PushButtonRepeat(true);来设置好 这样每次只要是激活就会返回trueif (ImGui::ArrowButton("##left", ImGuiDir_Left)) { counter--; }ImGui::SameLine(0.0f, spacing);if (ImGui::ArrowButton("##right", ImGuiDir_Right)) { counter++; }ImGui::PopButtonRepeat();//弹出设置当前Button状态ImGui::SameLine();ImGui::Text("%d", counter);

ImGui::RadioButton按钮状态

static int e = 0;ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();ImGui::RadioButton("radio c", &e, 2);if (e == 0){//}else if (e==1){//}else if (e == 2){//}

ImGui::Button按钮状态

if (ImGui::IsItemActive()){    counter++;    ImGui::SameLine();    ImGui::Text(u8"激活");    ImGui::SameLine();    ImGui::Text("%d", counter);}else if (ImGui::IsItemClicked()){    //很快 基本是一帧    ImGui::SameLine();    ImGui::Text(u8"被点击");}

重复按钮状态

1.这是另外一种方法 通过函数判断

2.但是如果是2个按钮就不好判断了

3.建议还是上面用ImGui::PushButtonRepeat(true);来设置好 这样每次只要是激活就会返回true

重复

ImGui::ArrowButton("##left", ImGuiDir_Left);ImGui::SameLine(0.0f, spacing);ImGui::ArrowButton("##right", ImGuiDir_Right);if (ImGui::IsItemActive())//最近一个是否是激活状态{    counter++;    ImGui::SameLine();    ImGui::Text(u8"激活");    ImGui::SameLine();    ImGui::Text("%d", counter);}else if (ImGui::IsItemClicked()){    //很快 基本是一帧    ImGui::SameLine();    ImGui::Text(u8"被点击");}

颜色按钮状态

1.注意对于这种循环添加的按钮

2.一定要吧ID设置不一样

颜色按钮的响应

static int index = -1;for (int i = 0; i  0)    ImGui::SameLine();    ImGui::PushID(i);    ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i / 7.0f, 0.6f, 0.6f));    ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i / 7.0f, 0.7f, 0.7f));    ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i / 7.0f, 0.8f, 0.8f));    if (ImGui::Button("Click"))    {        index =i;    }    ImGui::PopStyleColor(3);    ImGui::PopID();}ImGui::Text(u8"ColorButton被点击:%d", index);

按钮颜色样式

1.还可以通过全局设置样式

2.这个之前讲过了就不讲了

3.只需要通过下图,所改就可以了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有