02 窗口(Begin&End)
Begin
bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
参数说明:
-
name:窗口名称(中文用u8)
-
p_open(可选):写入关闭状态的内存地址
-
flags(可选):窗口样式
基本案例
Begin要和End一起使用。
{ static bool isOpen = true; if (isOpen) { ImGui::Begin("Test", &isOpen); ImGui::End(); } }
|
窗口样式解读
ImGui常用样式定义在枚举ImGuiWindowFlags_中:
ImGuiWindowFlags_None = 0, ImGuiWindowFlags_NoTitleBar = 1 << 0, ImGuiWindowFlags_NoResize = 1 << 1, ImGuiWindowFlags_NoMove = 1 << 2, ImGuiWindowFlags_NoCollapse = 1 << 5,
|
可以通过加法或者**|运算**来进行组合。
窗口样式案例
ImGuiWindowFlags_ wflags{}; auto addflag = [&wflags](ImGuiWindowFlags_ f) { wflags = static_cast<ImGuiWindowFlags_>(wflags | f); };
addflag(ImGuiWindowFlags_NoTitleBar); addflag(ImGuiWindowFlags_NoResize); addflag(ImGuiWindowFlags_NoMove); addflag(ImGuiWindowFlags_NoCollapse);
{ static bool isOpen = true; if (isOpen) { ImGui::Begin("Test", &isOpen, wflags); ImGui::End(); } }
|
实践思路1(多窗口)
创建多窗口,设置一个主窗口作为背景填满整个窗口,其它窗口允许移动。
ImGuiWindowFlags_ wflags{}; auto addflag = [&wflags](ImGuiWindowFlags_ f) { wflags = static_cast<ImGuiWindowFlags_>(wflags | f); }; addflag(ImGuiWindowFlags_NoDecoration);
{ static bool isOpen = true; if (isOpen) { ImGui::Begin("Test", &isOpen, wflags); ImGui::End(); } }
|
实践思路2(隐藏背景窗口)
glfw
glfw添加如下设置:
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
|
io设置:
io.ConfigViewportsNoAutoMerge = true;
|
dx
修改showwindow第二个参数。
::ShowWindow(hwnd, SW_HIDE);
|
io设置:
io.ConfigViewportsNoAutoMerge = true;
|