在前兩堂課的範例專案中,每次用 Visual Studio 開啟專案執行,都會同時彈出兩個視窗:一個黑色命令列視窗、一個 ImGui 主畫面。實務上我們只需要顯示 GUI 主視窗,不需要額外的命令列。
移除黑色命令列視窗

如上圖所示,執行時會同時出現命令列與主介面兩個視窗,下面教你完整關閉多餘的命令列。
第一步,在程式碼最開頭、所有標頭檔引入語句的上方,加入這一行前置處理指令:
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")Code language: C++ (cpp)

如果沒有加入這行程式,後續連結階段會直接報錯。貼好之後,在方案總管內右鍵點擊你的專案名稱,選擇「屬性」。


接著依序展開分頁:組態屬性 (Configuration Properties) → 連結器 (Linker) → 系統 (System)
將「子系統 (SubSystem)」欄位設定為 Windows
儲存設定後重新執行專案,黑色命令列視窗就不會再彈出,外觀會變成標準的純 GUI 軟體。

目前所有 UI 控制項都侷限在中間小小的 Control Panel 面板內,接下來調整程式讓面板完整填滿整個主視窗。
設定控制項填滿整個主視窗
找到這一行原始程式碼:
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 視窗,同時移除多餘裝飾,達到滿版無邊框效果。
接著在
ImGui::End();Code language: CSS (css)
這行程式的下方新增:
ImGui::PopStyleVar(2);Code language: CSS (css)
PushStyleVar 會把臨時修改的樣式推入樣式堆疊,暫時覆蓋全域預設樣式。
前面我們連續推入兩組樣式參數:
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);Code language: CSS (css)
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;
}
Code language: PHP (php)
全部修改完成後重新執行專案,介面會變成下圖樣貌:

外觀已經接近一般常見的獨立 GUI 桌面軟體。
Previous: ImGui 範例解析
Next: 使用ImGui實作簡易加法計算機