Ocultar a janela de console preta no ImGui

Nos exemplos das duas aulas anteriores, sempre que abrimos o projeto no Visual Studio duas janelas aparecem: uma janela de linha de comando preta e a janela principal da interface gráfica. O ideal é exibir apenas a janela GUI, sem a janela de console extra.

Remover a janela de console preta

A imagem acima mostra o problema das duas janelas abertas ao rodar o programa. Vamos ver como desligar completamente a janela de console.

Primeiro, adicione essa linha no topo absoluto do arquivo de código fonte, antes de todos os includes de cabeçalho:

#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")Code language: C++ (cpp)

Se não adicionar essa diretiva, erros de ligação irão surgir durante a compilação. Depois de inserir a linha, clique com o botão direito no nome do projeto no Gerenciador de Soluções e selecione Propriedades.

Navegue pela árvore de configurações: Propriedades de Configuração (Configuration Properties)Ligador (Linker)Sistema (System)

Defina o campo Subsistema (SubSystem) para o valor Windows

Salve as configurações e execute o programa novamente. A janela de console preta não abrirá mais, restando apenas uma aplicação gráfica independente e limpa.

No momento todos os elementos da interface estão contidos em um pequeno painel flutuante chamado Control Panel. Em seguida, vamos alterar o código para que esse painel preencha toda a janela do GLFW.

Fazer os controles preencherem toda a janela principal

Localize essa linha original dentro do loop de renderização:

ImGui::Begin("Control Panel");Code language: PHP (php)

Substitua essa linha única pelo bloco completo abaixo:

        // Principais configurações para painel em tela cheia
        // Forçar o painel ImGui a cobrir toda a janela GLFW
        // 1. Sincronizar posição e tamanho a cada quadro com a janela externa GLFW
        ImGui::SetNextWindowPos(ImVec2(0, 0));
        ImGui::SetNextWindowSize(io.DisplaySize);

        // 2. Remover todas as decorações: bordas, arrasto, redimensionamento, salvamento de configurações de layout
        ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
            | ImGuiWindowFlags_NoMove
            | ImGuiWindowFlags_NoResize
            | ImGuiWindowFlags_NoSavedSettings;

        // 3. Remover cantos arredondados e linha de borda para colar perfeitamente nas bordas da janela
        ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
        ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);

        // 4. Criar janela com as flags definidas (barra de título ficará oculta)
        ImGui::Begin("Control Panel", nullptr, window_flags);Code language: C++ (cpp)

Esse trecho ajusta o tamanho do painel ImGui para coincidir exatamente com a janela GLFW e remove elementos decorativos extras para gerar uma interface sem bordas em tela cheia.

Depois, logo abaixo da linha

ImGui::End();Code language: CSS (css)

adicione essa linha:

ImGui::PopStyleVar(2);

O comando PushStyleVar armazena alterações temporárias de estilo em uma pilha, sobrescrevendo temporariamente os estilos globais padrão.

Anteriormente enviamos duas alterações de estilo para a pilha:

ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);

PopStyleVar(2) remove os dois valores da pilha de uma vez, restaurando os estilos globais originais.

Segue o código main completo com todas as alterações aplicadas:

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

        // Principais configurações para painel em tela cheia
        // Forçar o painel ImGui a cobrir toda a janela GLFW
        // 1. Sincronizar posição e tamanho a cada quadro com a janela externa GLFW
        ImGui::SetNextWindowPos(ImVec2(0, 0));
        ImGui::SetNextWindowSize(io.DisplaySize);

        // 2. Remover todas as decorações: bordas, arrasto, redimensionamento, salvamento de configurações de layout
        ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
            | ImGuiWindowFlags_NoMove
            | ImGuiWindowFlags_NoResize
            | ImGuiWindowFlags_NoSavedSettings;

        // 3. Remover cantos arredond
                                

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *