지난 두 수업 예제 코드를 Visual Studio로 실행하면 검은 콘솔 창과 ImGui GUI 창 두 개가 함께 뜹니다. 보통 GUI 프로그램만 사용하려면 콘솔 창을 안 보이게 설정해야 하는데, 방법을 자세히 설명해 드리겠습니다.
검은 콘솔 창 제거하기

위 사진처럼 실행할 때 창이 두 개 나오는 현상을 수정하고 콘솔 창이 아예 실행되지 않도록 설정합니다.
먼저 소스 코드 맨 위쪽, 모든 헤더 include 구문보다 상단에 아래 링커 지시문을 추가하세요.
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")Code language: C++ (cpp)

이 코드를 추가하지 않으면 빌드할 때 링크 오류가 발생합니다. 코드 입력이 끝났으면 솔루션 탐색기에서 프로젝트 이름을 우클릭한 뒤 속성을 선택합니다.


속성 창에서 경로를 따라 들어갑니다: 구성 속성 (Configuration Properties) → 링커 (Linker) → 시스템 (System)
하위 시스템(SubSystem) 항목을 Windows로 변경합니다.
설정을 저장하고 다시 실행하면 검은 콘솔 창이 뜨지 않고 순수한 GUI 앱으로 동작합니다.

현재 모든 UI 컨트롤이 작은 Control Panel 창 안에 갇혀있으니, 다음으로 이 패널이 GLFW 메인 창 전체를 채우도록 수정하겠습니다.
컨트롤 패널이 메인 창 전체를 채우도록 설정
코드 안에 아래 한 줄이 있는 부분을 찾으세요.
ImGui::Begin("Control Panel");Code language: PHP (php)
해당 한 줄을 아래 전체 코드 블록으로 교체합니다.
// 창 전체 채우기 핵심 설정
// ImGui 패널을 GLFW 창 크기에 맞춰 강제로 확장
// 1. 매 프레임 좌표와 크기를 부모 GLFW 창에 동기화
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(io.DisplaySize);
// 2. 테두리, 드래그, 크기 조절, 레이아웃 저장 기능 비활성화
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
| ImGuiWindowFlags_NoMove
| ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoSavedSettings;
// 3. 창 둥근 모서리와 외곽선을 없애 창 가장자리에 밀착
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
// 4. 플래그를 전달해 제목 없는 전체화면 패널 생성 (제목 표시줄 숨김)
ImGui::Begin("Control Panel", nullptr, window_flags);Code language: C++ (cpp)
이 코드로 ImGui 패널 크기가 GLFW 창과 완전히 일치하고 불필요한 장식 요소를 제거해 전체 화면 GUI를 구현할 수 있습니다.
그 다음
ImGui::End();Code language: CSS (css)
코드 바로 아래 한 줄을 추가합니다.
ImGui::PopStyleVar(2);
PushStyleVar는 임시 스타일 설정을 스택에 쌓아 전역 기본 스타일을 덮어쓰는 함수입니다.
앞서 스타일을 두 번 연속으로 쌓았습니다.
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
PopStyleVar(2)로 스택에 쌓인 두 가지 설정을 한 번에 꺼내 원래 전역 스타일로 복구합니다.
모든 수정 사항이 반영된 완전한 메인 코드는 아래와 같습니다.
#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();
// 창 전체 채우기 핵심 설정
// ImGui 패널을 GLFW 창 크기에 맞춰 강제로 확장
// 1. 매 프레임 좌표와 크기를 부모 GLFW 창에 동기화
ImGui::SetNextWindowPos(ImVec2(0, 0));
ImGui::SetNextWindowSize(io.DisplaySize);
// 2. 테두리, 드래그, 크기 조절, 레이아웃 저장 기능 비활성화
ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
| ImGuiWindowFlags_NoMove
| ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoSavedSettings;
// 3. 창 둥근 모서리와 외곽선을 없애 창 가장자리에 밀착
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
// 4. 플래그를 전달해 제목 없는 전체화면 패널 생성 (제목 표시줄 숨김)
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. 스택에 저장된 두 개의 스타일 설정 복구
ImGui::PopStyleVar(2);
// 수정 구간 종료
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;
}
모든 수정을 적용한 뒤 다시 실행하면 아래 이미지처럼 표시됩니다.

일반적인 데스크톱 GUI 프로그램과 매우 유사한 모습이 됩니다.