#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();
}