Imgui创建弹出框删除灰显的焦点屏幕
Posted
技术标签:
【中文标题】Imgui创建弹出框删除灰显的焦点屏幕【英文标题】:Imgui create pop up box removing the grayed out focus screen 【发布时间】:2021-06-30 04:31:47 【问题描述】:在 ImGui 中创建弹出模式时,我注意到在应用程序的其余部分出现了一个灰色叠加层(我认为将焦点放在弹出窗口上)。
但是,我想知道是否有办法让我删除那个灰色的覆盖屏幕,这样即使弹出该模式,我仍然可以与应用程序的其余部分进行交互。因此,模式会弹出,但不会干扰应用程序的其余部分 - 只是弹出一个信息以反映当前速度,直到用户单击“确定”以使弹出窗口消失。
这是我用于创建模态窗口的代码:
if (ImGui::BeginPopupModal("Speed Adjustment"))
std::string speed_text = "You're adjusting the speed";
speed_text += "\n";
ImGui::Text(speed_text.c_str());
//list the current speed
std::string currSpeed= "This is the current speed: " + std::to_string(databse->camSpeed);
ImGui::Text(currSpeed.c_str());
ImGui::Spacing();
ImGui::NextColumn();
ImGui::Columns(1);
ImGui::Separator();
ImGui::NewLine();
ImGui::SameLine(GetWindowWidth() - 270);
//click ok when finished adjusting
if (ImGui::Button("OK finished adjusting", ImVec2(200, 0)))
speedpopup= false;
ImGui::CloseCurrentPopup();
ImGui::EndPopup();
我是否需要为 beginPopupModal 部分添加某些标志?如果是这样,我应该使用什么标志?
谢谢,感谢您的帮助!
【问题讨论】:
模态通常意味着你不能与其他任何东西交互。也许您只是想要一个常规的弹出窗口? @RetiredNinja 那么我应该使用什么函数来定期弹出?通过使用 ImGui::Begin,我不希望它看起来像一个窗口/选项卡式窗口。所以不知道我应该改用什么功能:)你能告诉我吗?谢谢! 【参考方案1】:根据imgui.h:659
中的文档
弹出窗口、模态框:
它们会阻止正常的鼠标悬停检测(因此也会阻止大多数鼠标交互)。 如果不是模态的:可以通过单击它们外部的任意位置或按 ESCAPE 来关闭它们。 它们的可见性状态 (~bool) 是在内部保存的,而不是像我们习惯的常规 Begin*() 调用那样由程序员保存。如果您想与应用程序的其余部分进行交互,即使显示弹出窗口,最好使用常规的ImGui::Begin()
调用。甚至您可以根据需要使用适当的标志来使窗口居中。
static bool speedpopup = true;
if (speedpopup)
if (ImGui::Begin("mypicker"))
std::string speed_text = "You're adjusting the speed";
speed_text += "\n";
ImGui::Text(speed_text.c_str());
//list the current speed
std::string currSpeed = "This is the current speed: ";
ImGui::Text(currSpeed.c_str());
ImGui::Spacing();
ImGui::NextColumn();
ImGui::Columns(1);
ImGui::Separator();
ImGui::NewLine();
ImGui::SameLine(270);
//click ok when finished adjusting
if (ImGui::Button("OK finished adjusting", ImVec2(200, 0)))
speedpopup = false;
ImGui::End();
这样的辅助函数可以定义一个自定义的Begin()
bool BeginCentered(const char* name)
ImGuiIO& io = ImGui::GetIO();
ImVec2 pos(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f);
ImGui::SetNextWindowPos(pos, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
ImGuiWindowFlags flags = ImGuiWindowFlags_NoMove
| ImGuiWindowFlags_NoDecoration
| ImGuiWindowFlags_AlwaysAutoResize
| ImGuiWindowFlags_NoSavedSettings;
return ImGui::Begin(name, nullptr, flags);
imgui 文档在标题中很清楚。
【讨论】:
以上是关于Imgui创建弹出框删除灰显的焦点屏幕的主要内容,如果未能解决你的问题,请参考以下文章