九.《Imgui》常用的控件 | 您所在的位置:网站首页 › ImGui源码分析 › 九.《Imgui》常用的控件 |
源码所处位置 普通按钮 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 实验室设备网 版权所有 |