Я делаю программу, используя ImGui, и я хочу отображать всплывающее окно, если ввод в одном окне плохой после нажатия кнопки «ОК». Он вводит оператор IF и выполняет код, но всплывающее окно не появляется.
ImGui::OpenPopup("Error Creating Image");
// Always center this window when appearing
ImVec2 center = ImGui::GetMainViewport()->GetCenter();
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
if (ImGui::BeginPopupModal("Error Creating Image", NULL, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::SetItemDefaultFocus();
ImGui::Text("The size of the Image must be greater than 0. Also it need to have a name!\n\n");
ImGui::Separator();
if (ImGui::Button("OK")) {
ImGui::CloseCurrentPopup();
}
ImGui::EndPopup();
}
Весь код, который вы показываете, запускается только один раз, когда произошла ошибка?
Блок ImGui::BeginPopupModal
и связанный с ним блок if
должны выполняться каждый кадр, иначе всплывающее окно не будет отображаться.
Что-то вроде этого:
void foo() { // 'foo' runs every frame.
if (ImGui::Button("Show popup"))
ImGui::OpenPopup("ThePopup");
// Maybe some other stuff here.
if (ImGui::BeginPopupModal("ThePopup")) {
// Draw popup contents.
ImGui::EndPopup();
}
}
Код для отрисовки всплывающего окна можно перемещать куда угодно, главное, чтобы он находился на одном уровне стека ID.