ImGui 没有窗口?

问题描述 投票:0回答:3

是否可以创建没有背景或窗口的 ImGui 屏幕? 它只是可以在屏幕上拖动的 ImGui 窗口。 It would looks something like this, but instead of a blue background, you'd just see the application that is under it.

c++ imgui
3个回答
2
投票

我知道这个主题已经很老了,但它对某些人来说可能有用。

如果不创建窗口,您就无法真正显示 ImGui,但您可以使用 ImGui 的对接版本(链接此处)。该版本允许 ImGui 界面“活”在窗口之外。因此,您可以轻松地仅显示 ImGui 界面。

为此,您可以使用 ImGui 中的示例代码并修改窗口创建,如下所示:

ImGui_ImplWin32_EnableDpiAwareness();
const WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, _T("ImGui Standalone"), nullptr };
::RegisterClassEx(&wc);
const HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("ImGui Standalone"), WS_OVERLAPPEDWINDOW, 100, 100, 50, 50, NULL, NULL, wc.hInstance, NULL);

if (!CreateDeviceD3D(hwnd))
{
    CleanupDeviceD3D();
    ::UnregisterClass(wc.lpszClassName, wc.hInstance);
    return;
}

::ShowWindow(hwnd, SW_HIDE);
::UpdateWindow(hwnd);

当你调用

ShowWindow
函数时,你必须传递
SW_HIDE
参数来隐藏窗口并只保留ImGui界面。

您可以在此处找到完整的项目。


1
投票

如果是 GLFW 后端,下面带有 glclear 颜色的窗口提示会有所帮助

glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);

渲染循环:

{
    ...
    glfwGetFramebufferSize(window, &app_width, &app_height);
    glViewport(0, 0, app_width, app_height);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    
    //render
    ...
}

0
投票

我尝试了一下,“SW_HIDE”只是隐藏了构建,我必须从 Visual Studio 中关闭它,有修复吗?

© www.soinside.com 2019 - 2024. All rights reserved.