Masquer la fenêtre console noire sous ImGui

Sur les exemples des deux cours précédents, à chaque fois que nous ouvrons le projet avec Visual Studio, deux fenêtres s’affichent simultanément : une fenêtre de console en mode ligne de commande, et notre fenêtre graphique principale. Or, nous souhaitons n’afficher que la fenêtre GUI sans la console parasite.

Supprimer la fenêtre console noire

Comme sur la capture ci-dessus, l’exécution génère deux fenêtres distinctes. Voici la méthode complète pour désactiver totalement la fenêtre console.

Tout d’abord, ajoutez cette ligne tout en haut du fichier source, avant l’ensemble des includes de fichiers d’en-tête :

#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")Langage du code : C++ (cpp)

Si vous omettez cette directive, des erreurs de liaison apparaîtront lors de la compilation. Après l’avoir insérée, faites un clic droit sur le nom du projet dans l’Explorateur de solutions, puis sélectionnez Propriétés.

Naviguez ensuite dans l’arborescence : Propriétés de configuration (Configuration Properties)Éditeur de liens (Linker)Système (System)

Définissez le champ Sous-système (SubSystem) sur la valeur Windows

Enregistrez les paramètres et relancez l’exécution : la fenêtre console noire disparaît complètement, on obtient une application graphique autonome propre.

Actuellement, tous nos widgets d’interface sont confinés dans un petit panneau flottant nommé Control Panel. Nous allons modifier le code pour que ce panneau occupe l’intégralité de la fenêtre hôte GLFW.

Faire occuper tout l’écran aux contrôles de l’interface

Repérez cette ligne dans votre boucle de rendu :

ImGui::Begin("Control Panel");Langage du code : PHP (php)

Remplacez cette unique ligne par le bloc complet ci-dessous :

        // Paramétrages principaux pour le plein écran
        // Forcer le panneau à recouvrir toute la fenêtre GLFW
        // 1. Synchroniser position et taille du panneau avec la fenêtre GLFW par trame
        ImGui::SetNextWindowPos(ImVec2(0, 0));
        ImGui::SetNextWindowSize(io.DisplaySize);

        // 2. Supprimer tous les décorations : bordures, déplacement, redimensionnement, sauvegarde des paramètres
        ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
            | ImGuiWindowFlags_NoMove
            | ImGuiWindowFlags_NoResize
            | ImGuiWindowFlags_NoSavedSettings;

        // 3. Supprimer les arrondis et la bordure extérieure pour coller parfaitement aux bords
        ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
        ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);

        // 4. Créer la fenêtre plein écran sans barre de titre
        ImGui::Begin("Control Panel", nullptr, window_flags);Langage du code : C++ (cpp)

Ce bloc ajuste les dimensions du panneau ImGui pour correspondre exactement à la fenêtre GLFW, tout en retirant les ornements pour un rendu sans bordures sur toute la surface.

Ensuite, juste sous l’appel

ImGui::End();Langage du code : CSS (css)

Ajoutez cette instruction :

ImGui::PopStyleVar(2);Langage du code : CSS (css)

PushStyleVar stocke temporairement des valeurs de style sur une pile, en surchargeant les styles globaux par défaut.

Nous avons empilé deux modifications de style :

ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);Langage du code : CSS (css)

PopStyleVar(2) dépile les deux entrées d’un coup, restaurant les styles initiaux de l’application.

Voici le code complet du main avec toutes les modifications intégrées :

#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();

        // Paramétrages principaux pour le plein écran
        // Forcer le panneau à recouvrir toute la fenêtre GLFW
        // 1. Synchroniser position et taille du panneau avec la fenêtre GLFW par trame
        ImGui::SetNextWindowPos(ImVec2(0, 0));
        ImGui::SetNextWindowSize(io.DisplaySize);

        // 2. Supprimer tous les décorations : bordures, déplacement, redimensionnement, sauvegarde des paramètres
        ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
            | ImGuiWindowFlags_NoMove
            | ImGuiWindowFlags_NoResize
            | ImGuiWindowFlags_NoSavedSettings;

        // 3. Supprimer les arrondis et la bordure extérieure pour coller parfaitement aux bords
        ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
        ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);

        // 4. Créer la fenêtre plein écran sans barre de titre
        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. Restaurer les deux styles précédemment empilés
        ImGui::PopStyleVar(2);
        // Fin de la section modifiée

        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;
}
Langage du code : PHP (php)

Appliquez toutes ces modifications et relancez le programme, vous obtiendrez le rendu de la capture ci-dessous :

L’apparence correspond désormais à une application graphique classique de bureau.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *