飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2009|回复: 1

[C/C++] 我们一起学习IMGUI-学习IMGUI

[复制链接]
  • TA的每日心情
    开心
    2024-4-12 11:13
  • 签到天数: 25 天

    [LV.4]偶尔看看III

    发表于 2023-10-22 13:44:27 | 显示全部楼层 |阅读模式
    本帖最后由 骑着蜗牛游地球 于 2023-10-22 13:46 编辑

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

         拷贝完成后,我们在我们自己的工程中,创建一个ImGui筛选器,将对应的ImGui文件添加进去,结果如图:
        图片11.png
        然后在,添加如下头文件:
        #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上:
    // Data
    static 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 functions
    bool CreateDeviceD3D(HWND hWnd);
    void CleanupDeviceD3D();
    void CreateRenderTarget();
    void CleanupRenderTarget();
    LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
       ·然后将main中的代码拷贝到WinMian中
        ·最后,将这个几个函数拷贝到WinMain函数的下面:
    // Helper functions
    bool 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)
        最后,编译运行我们自己的项目,编译成功,运行后,效果如下图:
          图片12.png
      此篇到此结束,下一篇,我们将介绍ImGui中的各种强大的控件


    PYG19周年生日快乐!
  • TA的每日心情

    2025-1-13 08:50
  • 签到天数: 348 天

    [LV.8]以坛为家I

    发表于 2023-10-24 07:27:55 | 显示全部楼层
    一起来学习。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表