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