我知道这个主题已经很老了,但它对某些人来说可能有用。
如果不创建窗口,您就无法真正显示 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界面。
您可以在此处找到完整的项目。
如果是 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
...
}
我尝试了一下,“SW_HIDE”只是隐藏了构建,我必须从 Visual Studio 中关闭它,有修复吗?