Imgui 创建弹出框删除灰色焦点屏幕
Imgui create pop up box removing the grayed out focus screen
在 ImGui 中创建弹出模式时,我注意到应用程序的其余部分出现了一个灰色覆盖层(我认为是为了将焦点放在弹出窗口上)。
但是,我想知道是否有办法删除那个灰色的覆盖屏幕,这样即使弹出该模式,我仍然可以与应用程序的其余部分进行交互。因此,模式会弹出,但它不会干扰应用程序的其余部分 - 只会弹出一个信息来反映当前速度,直到用户单击“确定”以使弹出窗口消失。
这是我创建模态 window 的代码:
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 部分添加某些标志吗?如果是这样,我应该使用什么标志?
谢谢,如有任何帮助,我们将不胜感激!
根据 imgui.h:659
中的文档
弹出窗口、模式:
- 它们阻止了正常的鼠标悬停检测(因此也阻止了大多数鼠标交互)。
- 如果不是模态:可以通过单击它们之外的任意位置或按 ESCAPE 来关闭它们。
- 它们的可见性状态 (~bool) 在内部保存,而不是像我们习惯的常规 Begin*() 调用那样由程序员保存。
如果您想要与应用程序的其余部分进行交互,即使在显示弹出窗口时,最好使用常规 ImGui::Begin()
调用。即使您可以根据需要使用适当的标志使 window 居中。
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 文档在 headers.
中很清楚
在 ImGui 中创建弹出模式时,我注意到应用程序的其余部分出现了一个灰色覆盖层(我认为是为了将焦点放在弹出窗口上)。
但是,我想知道是否有办法删除那个灰色的覆盖屏幕,这样即使弹出该模式,我仍然可以与应用程序的其余部分进行交互。因此,模式会弹出,但它不会干扰应用程序的其余部分 - 只会弹出一个信息来反映当前速度,直到用户单击“确定”以使弹出窗口消失。
这是我创建模态 window 的代码:
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 部分添加某些标志吗?如果是这样,我应该使用什么标志?
谢谢,如有任何帮助,我们将不胜感激!
根据 imgui.h:659
弹出窗口、模式:
- 它们阻止了正常的鼠标悬停检测(因此也阻止了大多数鼠标交互)。
- 如果不是模态:可以通过单击它们之外的任意位置或按 ESCAPE 来关闭它们。
- 它们的可见性状态 (~bool) 在内部保存,而不是像我们习惯的常规 Begin*() 调用那样由程序员保存。
如果您想要与应用程序的其余部分进行交互,即使在显示弹出窗口时,最好使用常规 ImGui::Begin()
调用。即使您可以根据需要使用适当的标志使 window 居中。
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 文档在 headers.
中很清楚