Sembunyikan Jendela Command Line Hitam pada ImGui

Dalam contoh proyek dua pelajaran sebelumnya, setiap kali kita buka proyek pakai Visual Studio, dua jendela akan muncul sekaligus: satu jendela command line hitam dan satu jendela utama GUI ImGui. Kita hanya ingin menampilkan jendela GUI saja tanpa konsol tambahan.

Cara Menghapus Jendela Konsol Hitam

Seperti pada gambar di atas, program akan menampilkan dua jendela sekaligus saat dijalankan. Berikut langkah untuk menonaktifkan jendela command line sepenuhnya.

Pertama, tambahkan baris kode berikut di paling atas file sumber, sebelum semua perintah include header:

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

Jika tidak menambahkan baris ini, nanti akan muncul error linker saat build. Setelah menambahkan, klik kanan nama proyek di Solution Explorer lalu pilih Properties.

Kemudian buka menu pengaturan secara berurutan: Configuration PropertiesLinkerSystem

Ubah nilai kolom SubSystem menjadi Windows

Simpan semua pengaturan lalu jalankan ulang proyek, jendela konsol hitam tidak akan muncul lagi, program akan berjalan layaknya aplikasi GUI standar.

Saat ini semua elemen UI masih terbatas di panel kecil bernama Control Panel. Selanjutnya kita ubah kode agar panel ini memenuhi seluruh jendela GLFW utama.

Atur Kontrol Agar Memenuhi Seluruh Jendela Utama

Cari baris kode asli berikut di dalam loop render:

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

Ganti baris tunggal tersebut dengan blok kode lengkap di bawah ini:

        // Pengaturan utama untuk layar penuh
        // Paksa panel ImGui menutupi seluruh jendela GLFW
        // 1. Sinkronkan posisi dan ukuran setiap frame dengan jendela GLFW luar
        ImGui::SetNextWindowPos(ImVec2(0, 0));
        ImGui::SetNextWindowSize(io.DisplaySize);

        // 2. Hapus semua hiasan jendela: bingkai, seret, ubah ukuran, simpan pengaturan tata letak
        ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
            | ImGuiWindowFlags_NoMove
            | ImGuiWindowFlags_NoResize
            | ImGuiWindowFlags_NoSavedSettings;

        // 3. Hilangkan sudut bulat dan garis tepi agar menempel sempurna ke pinggir jendela
        ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
        ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);

        // 4. Buat jendela dengan flag (bilah judul akan tersembunyi)
        ImGui::Begin("Control Panel", nullptr, window_flags);Code language: C++ (cpp)

Blok kode ini berfungsi menyesuaikan ukuran panel ImGui agar sama persis dengan jendela GLFW sekaligus menghapus hiasan berlebih untuk tampilan layar penuh tanpa bingkai.

Lalu tepat di bawah baris

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

Tambahkan kode berikut:

ImGui::PopStyleVar(2);Code language: CSS (css)

Fungsi PushStyleVar menyimpan perubahan gaya sementara ke tumpukan dan menimpa gaya global default.

Sebelumnya kita memasukkan dua pengaturan gaya ke tumpukan:

ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);Code language: CSS (css)

PopStyleVar(2) mengeluarkan dua nilai sekaligus dari tumpukan dan mengembalikan gaya global awal.

Berikut kode main lengkap dengan semua perubahan:

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

        // Pengaturan utama untuk layar penuh
        // Paksa panel ImGui menutupi seluruh jendela GLFW
        // 1. Sinkronkan posisi dan ukuran setiap frame dengan jendela GLFW luar
        ImGui::SetNextWindowPos(ImVec2(0, 0));
        ImGui::SetNextWindowSize(io.DisplaySize);

        // 2. Hapus semua hiasan jendela: bingkai, seret, ubah ukuran, simpan pengaturan tata letak
        ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration
            | ImGuiWindowFlags_NoMove
            | ImGuiWindowFlags_NoResize
            | ImGuiWindowFlags_NoSavedSettings;

        // 3. Hilangkan sudut bulat dan garis tepi agar menempel sempurna ke pinggir jendela
        ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
        ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);

        // 4. Buat jendela dengan flag (bilah judul akan tersembunyi)
        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. Keluarkan dua gaya dari tumpukan untuk kembalikan pengaturan awal
        ImGui::PopStyleVar(2);
        // Akhir bagian yang diubah

        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)

Terapkan semua perubahan lalu jalankan ulang proyek, tampilan akan seperti gambar di bawah:

Tampilan sudah mirip dengan aplikasi GUI desktop biasa pada umumnya.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *