前回までの2レッスンのサンプルコードをVisual Studioで実行すると、黒いコマンドライン画面とImGuiのGUI画面が2つ同時に起動します。通常のGUIアプリとして使用する場合は、GUIウィンドウだけ表示させたいので、コンソールを消す方法を解説します。
黒いコンソール画面を削除する

上記画像のように実行時に2つのウィンドウが出てしまう状態を修正し、コンソールを完全に起動しないよう設定します。
まずソースコードの一番先頭、全てのインクルード文より上に、以下のリンカ指示行を追加します。
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")Code language: C++ (cpp)

この行を記述しないと後のビルド時にリンクエラーが発生します。記述完了後、ソリューションエクスプローラー内のプロジェクト名を右クリックし、「プロパティ」を開きます。


プロパティ画面で階層を開きます:構成プロパティ (Configuration Properties) → リンカー (Linker) → システム (System)
「サブシステム (SubSystem)」の項目を Windows に変更します
設定を保存し再度実行すると、黒いコンソールウィンドウが起動しなくなり、純粋なGUIアプリケーションとして動作します。

現在はUI部品が「Control Panel」という小さなウィンドウ内に収まっているため、次はこのパネルがGLFW本体のウィンドウ全体を埋めるように調整します。
UI部品をウィンドウ全体に広げる設定
コード内に下記の一行がある箇所を探します。
ImGui::Begin("Control Panel");Code language: PHP (php)
この1行を以下のコードブロックに丸ごと置き換えます。
// ウィンドウを全面表示するための主要設定
// 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);Code language: CSS (css)
PushStyleVarは一時的なスタイル設定をスタックに積んでグローバル設定を上書きする命令です。
先ほど2回連続でスタイルを積みました。
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);Code language: CSS (css)
PopStyleVar(2)で一度に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. 2つ分のスタイルスタックを復元
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ソフトに近い見た目になります。