游戏引擎从零开始(12)-docking&多窗口

做一个好看的窗口

imGui有个docking分支,支持docking和多窗口功能。本节只有几行代码修改,读者可以直接参考commit修改,不逐行解释了.

docking

docking功能指的是拖动窗口,四边会出现一组响应区域,鼠标拖动子窗口到对应热区,会对齐到该边上。

多窗口

多窗口指的是整个应用可以有多个独立的窗口,即子窗口可以从主窗口中拖出去.

docking&多窗口实现

切换分支

docking和多窗口需要特定的imGui分支,进入Sandbox/Hazel/vendor/imgui目录,切花到docking分支

git checkout docking

如果你不能科学上网,可以手动下载imGui的 docking分支代码

修改imGui初始化的代码

c++ 复制代码
void ImGuiLayer::OnAttach() {
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImGui::StyleColorsDark();
    ImGuiIO& io = ImGui::GetIO(); (void)io;


    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;
    io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;

    io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

最重要的就是这两行,打开docking和viewports

c++ 复制代码
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

上一节中的代码实现的有点问题ImGuiIO& io = ImGui::GetIO(); io变量的声明少了个&,效果就不对,c++语言真是容易出错。
如果第一次运行出来的效果有问题,考虑删除项目运行目录下的"imgui.ini 文件",该文件会实时记录程序的数据

打开dockspace

程序运行起来,从examples中打开Dockspace,使docking和多窗口生效

本节对应的代码还做了多处调整,使整体结构更为合理。读者可参考commit对比。

完整代码参考 docking&viewports

相关推荐
TANGLONG2222 小时前
【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆、冒泡、快速、归并、计数以及非递归快速、归并排序)
java·c语言·数据结构·c++·算法·面试·排序算法
怀念无所不能的你2 小时前
洛谷P2814 家谱(c嘎嘎)
c语言·数据结构·c++·算法·map·并查集
胡乱儿起个名8 小时前
C++系列之构造函数和析构函数
开发语言·c++
若亦_Royi8 小时前
C++通透讲解设计模式:开闭原则(1)
c++·设计模式·开闭原则
ICLiuLi9 小时前
在基于Centos7的服务器上启用【Gateway】的【Clion Nova】(即 ReSharper C++ 引擎)
c++·gateway·centos7·远程开发·clion nova·resharperc++引擎
FranYeCisco11 小时前
C++并发:线程管控
jvm·c++
你又食言了哦13 小时前
C++通讯录管理系统
开发语言·c++·算法
是阿建吖!14 小时前
【优选算法】队列+宽搜(BFS)
c++·算法·宽度优先
Weraphael15 小时前
【数据结构】并查集
c语言·数据结构·c++·算法·阿里云·推荐算法
Thomas_YXQ15 小时前
Unity3D 基于GraphView实现的节点编辑器框架详解
unity·编辑器·unity3d·游戏开发·热更新