Visual Studio 删除ImGui中的父默认窗口

nvbavucw  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(216)

我使用的例子之一,从ImGui源代码(D3d11),我想删除丑陋的默认主机窗口,标题为“亲爱的ImGui DirectX11示例”(图像附件),只使用我自己创建的窗口(红色的)。

从代码中可以看出,它是使用以下命令创建的:

// Create application window
//ImGui_ImplWin32_EnableDpiAwareness();
WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"ImGui Example", NULL };
::RegisterClassExW(&wc);
HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"Dear ImGui DirectX11 Example", WS_OVERLAPPEDWINDOW, 100, 100, 600, 600, NULL, NULL, wc.hInstance, NULL);
pxyaymoc

pxyaymoc1#

简短的回答是你不能,因为DirectX 11窗口是用来呈现imgui内容的
但你可以隐藏它!主要是通过删除imgui窗口标题栏,使其填充整个DirectX 11窗口,将两个窗口“混合”在一起。
为此,只需将 ImGuiWindowFlags_NoTitleBar 标志传递给ImGui::开始()中的imgui窗口(根据您的需要,可能还包括ImGuiWindowFlags_NoMove和ImGuiWindowFlags_NoResize)
并在ImGui::开始()之前添加 ImGui::SetNextWindowPos()ImGui::SetNextWindowSize() 指令,以将imgui窗口放置在左上角,并将其大小调整为DirectX 11窗口
最终,你应该有这样的东西:

ImGuiWindowFlags window_flags = 0;
window_flags |= ImGuiWindowFlags_NoTitleBar;
window_flags |= ImGuiWindowFlags_NoMove;
window_flags |= ImGuiWindowFlags_NoResize;

while(...) {

    ...

    ImGui::SetNextWindowPos(ImVec2(0.0f, 0.0f)); // place the next window in the top left corner (0,0)
    ImGui::SetNextWindowSize(ImGui::GetIO().DisplaySize); // make the next window fullscreen
    ImGui::Begin("imgui window", NULL, window_flags) // create a window

    ...
}

相关问题