

码龄10年
暂无认证
34104访问
1
等级
8获赞
3
评论
热门文章
-
一.某岛之人物对象及其加密函数解析
2147
-
一.《传奇M》装备栏遍历的突破口
1789
-
二.某龙端游中LUA的分析和调用
1539
-
一.《轩辕传奇》周围遍历之二叉树
1384
-
一.《UE4奥丁》人物最大属性
1329
最新评论
-
20240228阿⑤
积分乍获得
-
20231124ziher
666
-
20230909八月老师
什麼時候發佈易語言支持庫呢
九.《Imgui》常用的控件
Heart
2023-06-06 14:35:45 发布
341
分类专栏: 开发技术篇 文章标签: 按钮控件 鼠标事件响应
源码所处位置
普通按钮
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(); }
单选按钮
选择控件改变变量
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);来设置好 这样每次只要是激活就会返回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"被点击"); }
重复按钮状态
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 < 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.只需要通过下图,所改就可以了


评论列表