码龄10年 暂无认证

34104
访问
1
等级

8
获赞
3
评论

最新评论

  • 20240228阿⑤

    积分乍获得

  • 20231124ziher

    666

  • 20230909八月老师

    什麼時候發佈易語言支持庫呢

九.《Imgui》常用的控件

Heart 2023-06-06 14:35:45 发布 341

分类专栏: 开发技术篇 文章标签: 按钮控件 鼠标事件响应

源码所处位置

223241013243684.png

普通按钮

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

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

for (int i = 0; i < 7; i++)
{
    if (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();
}

单选按钮

116103816240315.png

选择控件改变变量

320632113220894.gif

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);

箭头按钮改变变量

455834013232345.gif

432295113225230.gif

// 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);来设置好 这样每次只要是激活就会返回true
if (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"被点击");
}

重复按钮状态

220595713252794.png

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

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

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

重复

162972314235007.gif

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设置不一样

颜色按钮的响应

394351417246070.gif

static int index = -1;
for (int i = 0; i < 7; i++)
{
    if (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.只需要通过下图,所改就可以了

583013514220556.png

Heart1
0 0 上传作业
X
    网友评论 0条评论 0人参与
    请登陆会员1

    表情

    评论列表

×