骑着蜗牛游地球 发表于 2023-10-22 13:44:27

我们一起学习IMGUI-学习IMGUI

本帖最后由 骑着蜗牛游地球 于 2023-10-22 13:46 编辑

我们一起学习IMGUI-学习IMGUI接着前一个教程,我们了解了IMGUI,今天我们来一起学习IMGUI。IMGUI虽然提供了很多例子,但是例子只是用来学习用的,我们需要学以致用,创建自己的IMGUI。首先,创建新工程(这里已VS2022来讲解)。·打开VS2022,点击创建新项目,如下图:      
   ·点击后,进入了一个新界面,在新界面中搜索:Windows 桌面应用程序,然后选中,点击下一步:      
   ·进入了配置新项目界面,输入项目名:ImGuiStudy,点击创建,新项目创建完成。      
创建完成项目后,我们删除VS生成的框架代码,只留下WinMain,之所以删除,因为我们的IMGUI不需要这些生成的框架代码。并在工程目录下创建一个子目录ImGui。如下图:      
我们打开Imgui的代码目录,将如下文件拷贝到我们自己创建的ImguiStudy工程的ImGui的目录中:      
同时打开backends,将如下文件也拷贝到我们的Imgui目录下,由于我们基于的是Win32的,所以对应的Win32文件也需要拷贝:      
      

   拷贝完成后,我们在我们自己的工程中,创建一个ImGui筛选器,将对应的ImGui文件添加进去,结果如图:   
    然后在,添加如下头文件:    #include "..\ImGui\imconfig.h"    #include "..\ImGui\imgui.h"    #include "..\ImGui\imgui_impl_dx11.h"    #include "..\ImGui\imgui_impl_win32.h"    #include "..\ImGui\imgui_internal.h"    #include "..\ImGui\imstb_rectpack.h"    #include "..\ImGui\imstb_textedit.h"    #include "..\ImGui\imstb_truetype.h"    #include <d3d11.h>     #pragma comment(lib,"d3d11.lib") 其中前8给是ImGui的头文件,后两个是由于我们使用了dx11,所以需要包含的对应DX库。 到此,我们自己的ImGui工程创建完成,编译运行,发现没任何反应。当然,因为我们没有添加ImGui代码,WinMain中是一个空函数。前一遍教程,我们提到了Imgui提供了很多例子,那么为了方便,可以直接将对应例子拷贝了到我们自己的工程中,来看看效果。打开ImGui的examples,将如下代码拷贝到我们自己的工程中:·打开例子example_win32_directx11中的main.cpp,先将如下代码拷贝到我们的工程中的ImGuiStudy.cpp文件的MainWin上:// Datastatic ID3D11Device*            g_pd3dDevice = nullptr;static ID3D11DeviceContext*   g_pd3dDeviceContext = nullptr;static IDXGISwapChain*          g_pSwapChain = nullptr;static UINT                     g_ResizeWidth = 0, g_ResizeHeight = 0;static ID3D11RenderTargetView*g_mainRenderTargetView = nullptr;
// Forward declarations of helper functionsbool CreateDeviceD3D(HWND hWnd);void CleanupDeviceD3D();void CreateRenderTarget();void CleanupRenderTarget();LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);   ·然后将main中的代码拷贝到WinMian中    ·最后,将这个几个函数拷贝到WinMain函数的下面:// Helper functionsbool CreateDeviceD3D(HWND hWnd)void CleanupDeviceD3D()void CreateRenderTarget()void CleanupRenderTarget()
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)    最后,编译运行我们自己的项目,编译成功,运行后,效果如下图:   
此篇到此结束,下一篇,我们将介绍ImGui中的各种强大的控件

hjtoh 发表于 2023-10-24 07:27:55

一起来学习。
页: [1]
查看完整版本: 我们一起学习IMGUI-学习IMGUI