Bei den Beispielprojekten der letzten beiden Lektionen öffnet Visual Studio beim Ausführen immer zwei Fenster gleichzeitig: ein schwarzes Konsolenfenster und das eigentliche ImGui-GUI-Fenster. In der Praxis benötigen wir nur das grafische Hauptfenster ohne die zusätzliche Kommandozeile.
Schwarzes Konsolenfenster entfernen

Auf dem Screenshot oben ist das Doppelfenster-Problem zu sehen. Im Folgenden erklären wir, wie man das Konsolenfenster komplett deaktiviert.
Fügen Sie zuerst diese Zeile ganz am Anfang der Quellcode-Datei, vor allen Header-Includes ein:
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")Code-Sprache: C++ (cpp)

Wenn Sie diese Pragma-Zeile weglassen, treten später Linker-Fehler auf. Klicken Sie nach dem Einfügen im Projektmappen-Explorer mit der rechten Maustaste auf Ihren Projektnamen und wählen Sie Eigenschaften aus.


Navigieren Sie in der Eigenschaftenmaske folgendermaßen: Konfigurationseigenschaften (Configuration Properties) → Linker (Linker) → System (System)
Setzen Sie das Feld Subsystem (Teilsystem) auf den Wert Windows
Speichern Sie die Einstellungen und starten Sie das Programm neu. Das schwarze Konsolenfenster erscheint nicht mehr, es handelt sich um eine saubere eigenständige GUI-Anwendung.

Momentan befinden sich alle UI-Steuerelemente in einem kleinen schwebenden „Control Panel“-Fenster. Als Nächstes passen wir den Code an, damit dieses Panel das gesamte GLFW-Hauptfenster ausfüllt.
Steuerelemente das gesamte Hauptfenster ausfüllen lassen
Suchen Sie diese Original-Zeile in Ihrer Render-Schleife:
ImGui::Begin("Control Panel");Code-Sprache: PHP (php)
Ersetzen Sie diese einzelne Zeile durch den vollständigen Codeblock unten:
// Wichtige Einstellungen für Vollbild-Panel
// ImGui-Panel zwingen, das gesamte GLFW-Fenster auszufüllen
// 1. Position und Größe jedes Frames mit dem äußeren GLFW-Fenster synchronisieren
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(io.DisplaySize);
// 2. Alle Dekorationen entfernen: Rahmen, Ziehen, Skalieren, Speichern von Layout-Einstellungen
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
| ImGuiWindowFlags_NoMove
| ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoSavedSettings;
// 3. Fensterrundungen und Außenrahmen entfernen, damit es bündig am Fensterrand anliegt
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
// 4. Fenster mit Flags erstellen (Titel-Leiste wird ausgeblendet)
ImGui::Begin("Control Panel", nullptr, window_flags);Code-Sprache: C++ (cpp)
Dieser Codeblock sorgt dafür, dass das ImGui-Panel exakt die Größe des GLFW-Fensters annimmt und überflüssige Verzierungen entfernt werden, um ein randloses Vollbild-GUI zu erzeugen.
Fügen Sie direkt unterhalb von
ImGui::End();Code-Sprache: CSS (css)
folgende Zeile hinzu:
ImGui::PopStyleVar(2);Code-Sprache: CSS (css)
PushStyleVar schreibt temporäre Stiländerungen auf einen Stil-Stack und überschreibt vorläufig die globalen Standardstile.
Wir haben zwei Stilwerte nacheinander auf den Stack gelegt:
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);Code-Sprache: CSS (css)
PopStyleVar(2) holt beide Einträge wieder vom Stack zurück und stellt die ursprünglichen globalen Stile wieder her.
Hier ist der vollständige angepasste Main-Code mit allen Änderungen:
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#include <GLFW/glfw3.h>
#include "imgui.h"
#include "backends/imgui_impl_glfw.h"
#include "backends/imgui_impl_opengl3.h"
#include <cstdio>
int main()
{
// Initialize GLFW
if (!glfwInit())
{
printf("GLFW initialization failed\n");
return -1;
}
// OpenGL 3.3
const char* glsl_version = "#version 330";
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// Create window
GLFWwindow* window = glfwCreateWindow(1000, 600, "ImGui Minimal Demo (VS2022)", nullptr, nullptr);
if (!window)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwSwapInterval(1); // VSync enable
// Initialize ImGui
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
ImGui::StyleColorsDark();
// Bind GLFW + OpenGL3 backend
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);
// UI state variables
float slider_value = 0.5f;
int click_count = 0;
bool show_full_demo = false;
// Main render loop
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
// Start new ImGui frame
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
// Wichtige Einstellungen für Vollbild-Panel
// ImGui-Panel zwingen, das gesamte GLFW-Fenster auszufüllen
// 1. Position und Größe jedes Frames mit dem äußeren GLFW-Fenster synchronisieren
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(io.DisplaySize);
// 2. Alle Dekorationen entfernen: Rahmen, Ziehen, Skalieren, Speichern von Layout-Einstellungen
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
| ImGuiWindowFlags_NoMove
| ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoSavedSettings;
// 3. Fensterrundungen und Außenrahmen entfernen, damit es bündig am Fensterrand anliegt
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
// 4. Fenster mit Flags erstellen (Titel-Leiste wird ausgeblendet)
ImGui::Begin("Control Panel", nullptr, window_flags);
ImGui::Text("Hello ImGui + VS2022");
ImGui::SliderFloat("Slider Value", &slider_value, 0.f, 1.f);
if (ImGui::Button("Click to Count"))
click_count++;
ImGui::SameLine();
ImGui::Text("Click Count: %d", click_count);
ImGui::Checkbox("Show Full ImGui Demo Window", &show_full_demo);
ImGui::End();
// 5. Zwei vorherige Stil-Stack-Einträge wiederherstellen
ImGui::PopStyleVar(2);
// Ende des geänderten Bereichs
if (show_full_demo)
ImGui::ShowDemoWindow(&show_full_demo);
// Render ImGui draw data
ImGui::Render();
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);
glClearColor(0.12f, 0.12f, 0.12f, 1.f);
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
glfwSwapBuffers(window);
}
// Cleanup resources
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
Code-Sprache: PHP (php)
Wenden Sie alle Änderungen an und starten Sie das Programm neu, das Ergebnis entspricht dem folgenden Screenshot:

Das Aussehen entspricht nun einem üblichen eigenständigen Desktop-GUI-Programm.