ImGui库使用笔记

GitHub - ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

#pragma once
#include <Windows.h>
#include <wchar.h>
#include <TlHelp32.h>
#include <iostream>
#include "imgui/imgui.h"
#include "imgui/imconfig.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")

 ImGui::Begin(u8"PvZ绘制",NULL, ImGuiWindowFlags_NoCollapse);

IMGUI 隐藏外框

   if (open)
            {
                ImGui::SetNextWindowPos(ImVec2(500,500), ImGuiCond_Once); //设置窗口位置
                ImGui::SetWindowSize(ImVec2(200, 100), ImGuiCond_Once);
                ImGui::Begin("Hello,Ferry!", &open, ImGuiWindowFlags_NoCollapse );  //窗口绘制开始
                ImGui::Text("this is imgui!"); ImGui::SameLine();
                ImGui::Text("this is imgui!"); ImGui::SameLine();
                ImGui::Text("this is imgui!"); ImGui::SameLine();
                ImGui::Text("this is imgui!"); ImGui::SameLine();
                ImGui::Text("this is imgui!"); ImGui::SameLine();
                ImGui::End();    //窗口绘制结束
            }
            else break;

ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "idHello = %d", idHello);

ImGui::TextWrapped(u8"当前的字体会随着窗口大小的变换,而进行每一行字数的调整");

                 ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.5f, 0.5f, 0.5f, 0.5f));
                ImGui::Text(u8"I am ImGui!"); 
                ImGui::PopStyleColor();
                ImGui::PushFont(font);
                ImGui::Text(u8"I am ImGui!"); 
                ImGui::PopFont();
                  ImGui::SetCursorPos(ImVec2(100, 100));
                ImGui::Text(u8"I am ImGui!"); 
                ImGui::SetCursorPos(ImVec2(100, 150));
                ImGui::Text(u8"我是 ImGui!");
                ImGui::Text(u8"我是 ImGui!");  ImGui::SameLine;
            if (ImGui::Button(u8"开启透视", ImVec2(100, 35)))
                {
                    //按钮事件开启

                    MessageBox(NULL, _T("透视已开启!"),_T("提示"), MB_OK);

                    //按钮事件结束
                }
                   static bool IMcb_v1 = FALSE;
                static bool IMcb_v2 = FALSE;
                static bool IMcb_v3 = FALSE;

                //1.单击CheckBox   ImGui::Checkbox   点击 返回值-> True  没点击 Flase
                //2.判断选中还是取消选中 bool* V
                if (ImGui::Checkbox(u8"开启透视", &IMcb_v1))
                {//当你点击了 CheckBox的事件
                    if (IMcb_v1)
                    {
                        MessageBox(NULL, _T("启动成功"), NULL, MB_OK);
                    }
                    else
                    {
                        MessageBox(NULL, _T("功能已关闭"), NULL, MB_OK);
                    }

                }
                ImGui::Checkbox(u8"开启自瞄", &IMcb_v2);
                ImGui::Checkbox(u8"无限子弹", &IMcb_v3);
                static int V1{};  //组 用来分组
                static int V2{};
                ImGui::RadioButton(u8"单选框1", &V1, 1);  //1是标志 如果相同会同时选中
                ImGui::RadioButton(u8"单选框11", &V1, 2);
                ImGui::RadioButton(u8"单选框111", &V1, 3);   

                ImGui::RadioButton(u8"单选框1111", &V2, 4);

                switch (V1)
                {
                case 1:
                    ImGui::Text(u8"单选框当前值:%d", V1);
                    break;
                case 2:
                    ImGui::Text(u8"单选框当前值:%d", V1);
                    break;
                case 3:
                    ImGui::Text(u8"单选框当前值:%d", V1);
                    break;
                }
static void HelpMarker(const char* desc)
{
    ImGui::TextDisabled(u8"<?>");
    if (ImGui::BeginItemTooltip())
    {
        ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
        ImGui::TextUnformatted(desc);
        ImGui::PopTextWrapPos();
        ImGui::EndTooltip();
    }
}
   ImGui::TextWrapped("Are You OK?-----------------");   //文本自适应
                ImGui::TextColored(ImVec4(0.95f, 0.55f, 0.60f, 1.00f),"color text");
                ImGui::BulletText("bullettext");  //无序列表
                ImGui::BulletText("bullettext");
                ImGui::BulletText("bullettext"); ImGui::SameLine();

                HelpMarker(u8"你好,这里可以写一些帮助信息");
                  static char StrPass[MAX_PATH] = "";

                ImGui::InputText("Pass", StrPass, MAX_PATH, ImGuiInputTextFlags_Password);

                ImGui::Text("Pass:%s", StrPass);

                //1.非特殊情况 多个InputText 不要使用同一个 Buffer
                //2.非特殊情况 多个InputText Lable 不要相同
enum ImGuiInputTextFlags_
{
ImGuiInputTextFlags_None = 0,
ImGuiInputTextFlags_CharsDecimal = 1 << 0, //允许0123456789.+-*/
ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, //允许0123456789ABCDEFabcdef
ImGuiInputTextFlags_CharsUppercase = 1 << 2, //把a..z变成a..z
ImGuiInputTextFlags_CharsNoBlank = 1 << 3, //过滤掉空格,制表符
ImGuiInputTextFlags_AutoSelectAll = 1 << 4, //第一次鼠标聚焦时选择整个文本
ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, //当按Enter键时返回'true'(与每次修改值相反)。考虑一下IsItemDeactivatedAfterEdit()函数。
ImGuiInputTextFlags_CallbackCompletion = 1 << 6, //按TAB键回调(完成处理)
ImGuiInputTextFlags_CallbackHistory = 1 << 7, //按Up/Down箭头的回调(用于历史处理)
ImGuiInputTextFlags_CallbackAlways = 1 << 8, //每次迭代回调。用户代码可以查询光标位置,修改文本缓冲区。
ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, //回调字符输入以替换或丢弃它们。修改'EventChar'来替换或丢弃,或者在回调中返回1来丢弃。
ImGuiInputTextFlags_AllowTabInput = 1 << 10, //按TAB键在文本字段中输入一个'\t'字符
ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, //在多行模式下,按Enter取消焦点,按Ctrl+Enter添加新行(默认相反:按Ctrl+Enter取消焦点,按Enter添加行)。
ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, //禁用水平跟随光标
ImGuiInputTextFlags_AlwaysOverwrite = 1 << 13, //覆盖模式
ImGuiInputTextFlags_ReadOnly = 1 << 14, //只读模式
ImGuiInputTextFlags_Password = 1 << 15, //密码模式,显示所有字符为'*'
ImGuiInputTextFlags_NoUndoRedo = 1 << 16, //禁用undo/redo。注意,输入文本在活动时拥有文本数据,如果你想提供你自己的撤销/重做堆栈,你需要调用ClearActiveID()。
ImGuiInputTextFlags_CharsScientific = 1 << 17, //允许0123456789。+-*/eE(科学符号输入)
ImGuiInputTextFlags_CallbackResize = 1 << 18, //回调缓冲区容量更改请求(超出'buf_size'参数值),允许字符串增长。当字符串想要调整大小时通知(对于持有其大小缓存的字符串类型)。您将在回调中获得一个新的BufSize,并且需要遵守它。(请参阅misc/cpp/imgui_stdlib.h以获取使用此功能的示例)
imguiinputtextflags_callbackkedit = 1 << 19, //任何编辑的回调(注意InputText()已经在编辑时返回true,回调主要用于在焦点处于活动状态时操作底层缓冲区)
ImGuiInputTextFlags_EscapeClearsAll = 1 << 20, //如果Escape键不为空,则清除内容,否则停用(与Escape的默认行为相反)
                 ImGui::InputInt("INT", &PutInt,10);  //递增递减组合框
                ImGui::Text("INT", PutInt); 
                static std::string StrText1 = {};
                static std::string StrText2 = {};

                ImGui::InputText("String", &StrText1);
                ImGui::InputText("String", &StrText2);

                ImGui::Text("Str1:%s", StrText1.c_str());
                ImGui::Text("Str2:%s", StrText1.c_str());
                 static int SliderInt_Buffer = 0;
                static FLOAT SliderFloat_Buffer = 0;

                ImGui::SliderInt(" ", &SliderInt_Buffer,0,100,u8"自瞄强度:%d%%");
                ImGui::Text(u8"自瞄强度:%d%%", SliderInt_Buffer);

                ImGui::SliderFloat("  ", &SliderFloat_Buffer, 0, 100, u8"伤害范围:%0.1f%%");
                ImGui::Text(u8"伤害范围:%0.1f%%", SliderFloat_Buffer);

                if (ImGui::Combo(u8"地图", &CurrentIndex, CurrentMap, IM_ARRAYSIZE(CurrentMap)))
                {
                    MessageBox(NULL, NULL, NULL, NULL);
                } 
                ImGui::Text(u8"选中索引:%d", CurrentIndex);
                ImGui::Text(u8"选中文本:%s", CurrentMap[CurrentIndex]);

                switch (CurrentIndex)     //用索引来判断选择事件
                {
                case 0:

                case 1:

                }

        int CurrentIndex = -1;
        const char* CurrentMap[] = { "StyleColorsDark", "StyleColorsLight", "StyleColorsClassic" };
        if (ImGui::Combo("Theme", &CurrentIndex, CurrentMap, IM_ARRAYSIZE(CurrentMap)))
        {
            switch (CurrentIndex)
            {
            case 0:
                ImGui::StyleColorsDark();
                break;
            case 1:
                ImGui::StyleColorsLight();
                break;
            case 2:
                ImGui::StyleColorsClassic();
                break;
            }
        }
    if (ImGui::CollapsingHeader("风格设置"))
                {
                    if (ImGui::Combo(u8"风格", &CurrentIndex, CurrentMap, IM_ARRAYSIZE(CurrentMap)))
                    {
                        switch (CurrentIndex)
                        {
                        case 0:
                            ImGui::StyleColorsDark();
                            break;
                        case 1:
                            ImGui::StyleColorsLight();
                            break;
                        case 2:
                            ImGui::StyleColorsClassic();
                            break;
                        }
                    }
                }
                if (ImGui::CollapsingHeader(u8"折叠夹1"))
                {
                    ImGui::Text("sta");
                } 

                if (ImGui::CollapsingHeader(u8"折叠夹2"))
                {
                    ImGui::Separator();  //分割线
                    ImGui::Text("sta");
                } 
                if (ImGui::CollapsingHeader(u8"折叠夹3"))
                {
                    ImGui::Text("sta");

                if (ImGui::TreeNode(u8"小折叠夹1"))
                {
                    ImGui::Text("sta");
                    ImGui::TreePop();
                }
                }
             if (ImGui::BeginTabBar("TabBar"))
                {
                    if (ImGui::BeginTabItem(u8"基本设置"))
                    {

                        ImGui::EndTabItem();
                    }
                    if (ImGui::BeginTabItem(u8"技能设置"))
                    {

                        ImGui::EndTabItem();
                    }
                    if (ImGui::BeginTabItem(u8"副本设置"))
                    {

                        ImGui::EndTabItem();
                    }

                    ImGui::EndTabBar();
                }
   if (ImGui::BeginTable("Table", 3))
                {
                    ImGui::TableSetupColumn("Index");     //插入内容
                    ImGui::TableSetupColumn("Adress");    //插入内容
                    ImGui::TableSetupColumn("Name");      //插入内容
                    ImGui::TableHeadersRow();   //以标题头形式更新内容

                    for (int Row = 0; Row < 5; Row++)      //更新5行
                    {
                        ImGui::TableNextRow();       //更新行(添加行)
                        for (int Column = 0; Column < 3; Column++)   //列
                        {
                            ImGui::TableSetColumnIndex(Column); //在哪列添加
                            ImGui::Text("Row:%d Column:%d", Row, Column);
                        }
                    }
                    ImGui::EndTable();
                }
   ImVec4 color = ImVec4(1.0f, 0.0f, 0.0f, 1.0f); // 初始颜色

                    if (ImGui::ColorEdit4("Color", (float*)&color)) {

                        // 颜色发生改变时执行的代码

                    }
float progress = 0.5f; // 进度值

                    ImGui::ProgressBar(progress);
ImGui::SetNextWindowSize(ImVec2(400, 200));
ImTextureID textureID = ...; // 图像的纹理ID

ImVec2 imageSize(200, 200); // 图像的大小

ImGui::Image(textureID, imageSize);
if (ImGui::IsKeyPressed(ImGuiKey_Enter)) {

  // Enter键被按下

} else if (ImGui::IsKeyPressed(ImGuiKey_Escape)) {

  // Esc键被按下

}
ImVec2 rectMin(100, 100); // 矩形区域的左上角坐标

ImVec2 rectMax(300, 300); // 矩形区域的右下角坐标

if (ImGui::IsMouseHoveringRect(rectMin, rectMax)) {

  // 鼠标悬停在矩形区域内

} else {

  // 鼠标不在矩形区域内

}
 float value = 0.5f; // 浮点数的初始值

                    ImGui::SliderFloat("Value", &value, 0.0f, 1.0f);

ImGuiStyle&UI=ImGui::GetStyle();

//获取当前的ImGui样式并将其存储在名为UI的变量中,返回当前的UI样式.通过调用该函数,我们可以获取一个ImGuiStyle结构体的实例,该结构体包含了所有UI元素的样式属性,例如窗口标题的对齐方式,边框大小,颜色等.

UI->Colors[ImGuiCol_Text]=ImVec4(1.0f, 1.0f, 1.0f, 1.0f);//设置文本颜色为白色

透明窗口

ImGuiImplWin32EnableAlphaCompositing(hwnd);

ImGui::ColorEdit4("clear color", (float*)&clearcolor, ImGuiColorEditFlagsAlphaBar);

imgui Filedialog

void drawGui(){


    if (ImGui::Button("Open")) {
        IGFD::FileDialogConfig config;
        config.path = ".";

        ImGuiFileDialog::Instance()->SetFileStyle(IGFD_FileStyleByExtention, ".dll", ImVec4(0.0f, 1.0f, 0.5f, 0.9f));

        ImGuiFileDialog::Instance()->OpenDialog("ChooseFileDlgKey", "Choose File", ".dll", config);
    }

    if (ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey")) {
        if (ImGuiFileDialog::Instance()->IsOk()) { // action if OK
            std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName();
            std::string filePath = ImGuiFileDialog::Instance()->GetCurrentPath();
        }


        ImGuiFileDialog::Instance()->Close();
    }

}
    ImGui::Text(u8"主题: "); ImGui::SameLine();
    static int V1{};
    static int a = 0;
    if (ImGui::RadioButton(u8"暗黑主题", &V1,0))
    {
        ImGui::StyleColorsDark();
    } ImGui::SameLine();
    if (ImGui::RadioButton(u8"明亮主题", &V1,1))
    {
        ImGui::StyleColorsLight();
    } ImGui::SameLine();
    if (ImGui::RadioButton(u8"经典主题", &V1,2))
    {
        ImGui::StyleColorsClassic();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UE星空

感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值