当前位置: 首页 > news >正文

9.ImGui-滑块

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

上一个内容:8.ImGui-输入框

下图红框的就是滑块

然后开始找它的代码,首先点击下图红框

然后输入下图红框的内容,Another Window

然后下图红框的就是Another Window复选框了,然后双击它

然后就找到了滑块的代码,如下图红框,然后把它复制到我们的代码中

效果图:

// 加static让f变成静态变量,静态变量在函数中只会执行一次
// 第一次执行当前函数会执行 static float f = 0.0f; 这一行代码,第二次执行当前函数时会跳过 static float f = 0.0f;这一行代码
// 这样就能修改f的值后不会被重新赋值成0了
static float f = 0.0f;
// 滑块,下方代码滑块的数据范围是0.0到1.0
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
ImGui::SliderFloat("##float", &f, 0.0f, 1.0f);

ImGui::SliderFloat它一共有6个参数,有两个参数有默认值"%.3f"和0,上方代码中只使用了4个参数,后面两个使用的默认值,它最后一个参数可以设置滑块的类型

滑块类型的值如下

/*** ImGuiSliderFlags_ 枚举:控制滑动条(SliderXXX)和拖动控件(DragXXX)的行为特性* 可通过 | 运算符组合多个标志(例如:ImGuiSliderFlags_Logarithmic | ImGuiSliderFlags_NoInput)*/
enum ImGuiSliderFlags_
{/*** 作用:默认值,无任何特殊行为,使用ImGui的默认规则* 默认行为包括:* - 数值线性变化* - 支持Ctrl+Click或Enter手动输入文本* - 数值会按显示格式字符串的精度四舍五入* - 拖动时会被限制在min/max范围内(手动输入默认允许超出)* 适用场景:不需要自定义控件行为的基础场景*/ImGuiSliderFlags_None               = 0,/*** 作用:使控件数值按对数规律变化(默认是线性变化)* 区别:* - 线性变化:数值均匀增减(如1→2→3→4)* - 对数变化:小值时变化慢、大值时变化快(如1→2→4→8,符合比例感知)* 适用场景:* - 音量调节(人耳对音量是对数感知)* - 频率、缩放比例等需要"比例精度"的参数* 注意事项:* - 若使用显示格式字符串(如%.1f),建议搭配ImGuiSliderFlags_NoRoundToFormat* - 避免因格式精度不足导致数值被过度四舍五入*/ImGuiSliderFlags_Logarithmic        = 1 << 5,      /*** 作用:禁用"按显示格式精度四舍五入数值"的默认行为* 示例:* - 默认:格式为%.1f时,实际值1.234会被四舍五入为1.2* - 启用后:实际值保持1.234,显示时按%.1f展示为1.2(内部精度不变)* 适用场景:* - 需要高精度存储但简化显示的场景(如科学计算参数)* - 需保留原始数值精度的精细调节场景*/ImGuiSliderFlags_NoRoundToFormat    = 1 << 6,      /*** 作用:禁用手动输入文本功能,仅允许通过鼠标拖动改变数值* 默认行为:点击控件后按Enter或Ctrl+Click可弹出文本框手动输入* 适用场景:* - 不允许输入超出预期范围的数值(如安全参数0~10,禁止输入100)* - 只能按固定步长变化的参数(如整数调节,禁止输入小数)*/ImGuiSliderFlags_NoInput            = 1 << 7,      /*** 作用:启用循环包裹功能,拖动到最大值时自动跳回最小值,反之亦然* 示例:* - 角度调节(0~360°):拖到360°后继续拖会回到0°* - 月份调节(1~12):拖到12后继续拖会回到1* 适用场景:数值本身具有循环特性的参数(角度、周期、序号等)* 注意事项:目前仅支持DragXXX系列函数(如DragInt),不支持SliderXXX*/ImGuiSliderFlags_WrapAround         = 1 << 8,      /*** 作用:手动输入数值时,强制将数值限制在min~max范围内(夹紧)* 默认行为:手动输入允许超出min/max(拖动时才会被夹紧)* 示例:范围0~10,手动输入15会被自动改为10* 适用场景:需要严格限制范围的参数(如音量0~100、亮度0~255)*/ImGuiSliderFlags_ClampOnInput       = 1 << 9,      /*** 作用:即使min==max==0.0f,也强制启用夹紧功能* 默认问题:因历史原因,当min和max都为0时,DragXXX默认不夹紧,可能被拖到非0值* 适用场景:* - 动态范围参数(默认0~0禁止修改,后续可能改为0~10)* - 需严格锁定数值为0的场景*/ImGuiSliderFlags_ClampZeroRange     = 1 << 10,     /*** 作用:禁用键盘修饰键(Ctrl/Shift)对拖动速度的影响,保持固定速度* 默认行为:* - 按住Ctrl:拖动速度变慢(精细调节)* - 按住Shift:拖动速度变快(快速调节)* 适用场景:需要自定义拖动速度逻辑的场景(如根据范围自动调整速度)*/ImGuiSliderFlags_NoSpeedTweaks      = 1 << 11,     /*** 作用:组合标志,同时启用ClampOnInput和ClampZeroRange的功能* 等价于:ImGuiSliderFlags_ClampOnInput | ImGuiSliderFlags_ClampZeroRange* 适用场景:需要严格夹紧的场景(手动输入+0~0范围都限制)*/ImGuiSliderFlags_AlwaysClamp        = ImGuiSliderFlags_ClampOnInput | ImGuiSliderFlags_ClampZeroRange,/*** 作用:内部标志,用于检测API误用,用户禁止使用* 功能:检查是否有旧版API的参数(如float power)被错误转换为该枚举* 注意:普通用户不要在代码中使用,误用会触发调试断言*/ImGuiSliderFlags_InvalidMask_       = 0x7000000F,   
};

完整代码:

#include "main.h"  // 包含程序所需的头文件,其中声明了ImGui、DirectX等库的必要函数和类// 全局变量:存储DirectX 11核心资源和窗口状态(整个程序共享)
static UINT                     g_ResizeWidth = 0, g_ResizeHeight = 0;
// 窗口调整大小时的新宽度和高度
// 当窗口大小改变时,WM_SIZE消息会将新尺寸存储到这两个变量中
// 主循环会检测这两个变量,当它们不为0时进行渲染目标的调整static ID3D11Device* g_pd3dDevice = nullptr;
// Direct3D 11设备对象,是DirectX渲染的核心
// 负责创建所有的渲染资源,如纹理、缓冲区、渲染目标等
// 所有与硬件交互的渲染资源创建都需要通过该设备对象static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
// Direct3D 11设备上下文,相当于渲染命令的执行者
// 用于设置渲染状态、绑定资源、执行绘制命令等操作
// 可以理解为向GPU发送渲染指令的接口static IDXGISwapChain* g_pSwapChain = nullptr;
// 交换链对象,管理前后两个缓冲区实现双缓冲机制
// 前端缓冲区是正在显示的画面,后端缓冲区是正在渲染的画面
// 渲染完成后通过交换操作将后端缓冲区变为前端,避免画面闪烁static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;
// 主渲染目标视图,是交换链后端缓冲区的视图
// 告诉GPU渲染结果应该输出到哪个缓冲区
// ImGui绘制的所有UI最终都会渲染到这个目标上static bool                     g_SwapChainOccluded = false;
// 标记交换链是否被遮挡(如窗口被其他窗口完全覆盖)
// 当为true时可以暂停渲染以节省CPU和GPU资源
// 由Present函数的返回值判断并设置// 声明ImGui的Win32消息处理函数(定义在imgui_impl_win32.cpp中)
// 该函数用于让ImGui处理鼠标、键盘等输入消息
// 参数说明:
// - hWnd: 窗口句柄,标识接收消息的窗口
// - msg: 消息类型,如WM_MOUSEMOVE(鼠标移动)、WM_KEYDOWN(按键按下)等
// - wParam: 消息参数1,存储与消息相关的附加信息
// - lParam: 消息参数2,存储与消息相关的附加信息
// 返回值:如果消息被ImGui处理则返回true,否则返回false
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);// 自定义辅助函数:创建带提示的帮助标记
// 当鼠标悬停在"(?)"上时,会显示提示文本
// 参数:
// - desc: 要显示的提示文本内容
static void HelpMarker(const char* desc)
{ImGui::TextDisabled("(?)");  // 显示灰色的"(?)"作为帮助标记// 检查鼠标是否悬停在当前项目上,并开始绘制提示框if (ImGui::BeginItemTooltip()){// 设置文本自动换行的宽度(为字体大小的35倍)// 避免提示文本过长导致超出窗口范围ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);ImGui::TextUnformatted(desc);  // 显示提示文本(无格式)ImGui::PopTextWrapPos();       // 恢复文本换行设置ImGui::EndTooltip();           // 结束提示框绘制}
}// 窗口消息处理函数:处理所有与窗口相关的事件
// 包括窗口大小改变、关闭、鼠标键盘输入等
// 参数说明:
// - hWnd: 窗口句柄,标识当前接收消息的窗口
// - msg: 消息类型,Windows系统定义的消息编号
// - wParam: 消息参数1,具体含义取决于消息类型
// - lParam: 消息参数2,具体含义取决于消息类型
// 返回值:LRESULT类型,消息处理的结果
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{// 让ImGui先处理消息,优先处理UI相关的输入事件// 如果ImGui处理了该消息(如点击UI控件),则直接返回if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))return true;// 根据消息类型进行不同处理switch (msg){case WM_SIZE:  // 窗口大小改变事件// 如果是窗口最小化,则不需要调整渲染资源if (wParam == SIZE_MINIMIZED)return 0;// 从lParam中提取新的窗口宽度和高度// LOWORD宏获取lParam的低16位,存储宽度// HIWORD宏获取lParam的高16位,存储高度g_ResizeWidth = (UINT)LOWORD(lParam);g_ResizeHeight = (UINT)HIWORD(lParam);return 0;case WM_SYSCOMMAND:  // 系统命令事件(如ALT+空格调出窗口菜单)// 禁用ALT菜单,避免菜单弹出时遮挡ImGui控件// SC_KEYMENU是系统菜单命令,0xfff0用于屏蔽低位的扩展信息if ((wParam & 0xfff0) == SC_KEYMENU)return 0;break;  // 其他系统命令交给默认处理case WM_DESTROY:  // 窗口销毁事件(如点击关闭按钮)::PostQuitMessage(0);  // 发送退出消息,主循环会捕获并结束程序return 0;}// 其他未处理的消息,交给Windows系统默认处理return ::DefWindowProcW(hWnd, msg, wParam, lParam);
}// 创建渲染目标视图:将交换链的后台缓冲区绑定为渲染目标
// 渲染目标视图是GPU可以写入的资源视图
// 所有的渲染命令最终都会绘制到该渲染目标上
void CreateRenderTarget()
{ID3D11Texture2D* pBackBuffer = nullptr;  // 临时指针,用于获取后台缓冲区// 从交换链中获取后台缓冲区// 参数1:0表示获取第一个缓冲区(交换链通常有2个缓冲区)// 参数2:IID_ID3D11Texture2D是要获取的接口ID// 参数3:输出参数,接收后台缓冲区的指针g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));// 使用D3D设备创建渲染目标视图// 参数1:要绑定为渲染目标的纹理(这里是后台缓冲区)// 参数2:渲染目标视图的描述(nullptr表示使用默认设置)// 参数3:输出参数,接收创建的渲染目标视图g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_mainRenderTargetView);// 释放临时的后台缓冲区指针// 渲染目标视图已经引用了该缓冲区,不需要再保留此指针pBackBuffer->Release();
}// 清理渲染目标视图:释放资源,避免内存泄漏
// COM对象需要通过Release()方法释放,减少引用计数
// 当引用计数为0时,对象会被自动销毁
void CleanupRenderTarget()
{if (g_mainRenderTargetView){g_mainRenderTargetView->Release();  // 释放渲染目标视图g_mainRenderTargetView = nullptr;   // 置空指针,避免野指针}
}// 创建D3D11设备和交换链:初始化DirectX渲染环境
// 参数:
// - hWnd: 窗口句柄,渲染结果将显示在该窗口中
// 返回值:bool类型,true表示创建成功,false表示失败
bool CreateDeviceD3D(HWND hWnd)
{// 初始化交换链描述结构体,定义交换链的属性DXGI_SWAP_CHAIN_DESC sd;ZeroMemory(&sd, sizeof(sd));  // 清空结构体,避免未初始化的内存导致错误// 配置交换链参数sd.BufferCount = 2;                   // 缓冲区数量,2表示双缓冲sd.BufferDesc.Width = 0;              // 缓冲区宽度,0表示自动匹配窗口宽度sd.BufferDesc.Height = 0;             // 缓冲区高度,0表示自动匹配窗口高度sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;  // 像素格式,32位RGBA(8位/通道)sd.BufferDesc.RefreshRate.Numerator = 60;  // 刷新率分子,60表示60Hzsd.BufferDesc.RefreshRate.Denominator = 1; // 刷新率分母,60/1=60Hzsd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;  // 允许切换显示模式(窗口/全屏)sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;   // 缓冲区用途,作为渲染目标sd.OutputWindow = hWnd;               // 绑定的窗口,渲染结果显示到该窗口sd.SampleDesc.Count = 1;              // 多重采样数量,1表示无抗锯齿sd.SampleDesc.Quality = 0;            // 采样质量,0表示默认sd.Windowed = TRUE;                   // 窗口模式,TRUE表示窗口化,FALSE表示全屏sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;  // 交换效果,交换后丢弃后台缓冲区数据UINT createDeviceFlags = 0;  // 创建设备的标志// 调试模式开关,需要安装DirectX SDK才能使用// createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;D3D_FEATURE_LEVEL featureLevel;  // 存储实际支持的Direct3D特性级别(版本)// 支持的Direct3D版本列表,优先使用11.0,不支持则使用10.0const D3D_FEATURE_LEVEL featureLevelArray[2] = {D3D_FEATURE_LEVEL_11_0,D3D_FEATURE_LEVEL_10_0};// 创建设备、设备上下文和交换链HRESULT res = D3D11CreateDeviceAndSwapChain(nullptr,                       // 显卡适配器,nullptr表示使用默认显卡D3D_DRIVER_TYPE_HARDWARE,      // 驱动类型,硬件加速(使用GPU)nullptr,                       // 软件渲染模块,不需要则为nullptrcreateDeviceFlags,             // 创建设备的标志featureLevelArray,             // 支持的Direct3D版本列表2,                             // 版本列表的数量D3D11_SDK_VERSION,             // SDK版本,使用当前版本&sd,                           // 交换链描述结构体&g_pSwapChain,                 // 输出参数,接收创建的交换链&g_pd3dDevice,                 // 输出参数,接收创建的D3D设备&featureLevel,                 // 输出参数,接收实际支持的Direct3D版本&g_pd3dDeviceContext           // 输出参数,接收创建的设备上下文);// 如果硬件加速失败(如显卡不支持D3D11),尝试使用软件渲染(WARP驱动)if (res == DXGI_ERROR_UNSUPPORTED)res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_WARP,  // 软件渲染驱动nullptr, createDeviceFlags,featureLevelArray, 2,D3D11_SDK_VERSION, &sd,&g_pSwapChain, &g_pd3dDevice,&featureLevel, &g_pd3dDeviceContext);if (res != S_OK)  // 如果创建失败(S_OK表示成功)return false;CreateRenderTarget();  // 创建渲染目标视图return true;
}// 清理D3D资源:释放所有DirectX相关对象
// 按照依赖顺序释放,避免资源引用冲突
void CleanupDeviceD3D()
{CleanupRenderTarget();  // 先清理渲染目标视图// 释放交换链if (g_pSwapChain){g_pSwapChain->Release();g_pSwapChain = nullptr;}// 释放设备上下文if (g_pd3dDeviceContext){g_pd3dDeviceContext->Release();g_pd3dDeviceContext = nullptr;}// 释放D3D设备if (g_pd3dDevice){g_pd3dDevice->Release();g_pd3dDevice = nullptr;}
}// 主函数:程序入口点,控制整个程序的生命周期
int main() {// DPI适配:解决高分辨率屏幕下UI模糊的问题ImGui_ImplWin32_EnableDpiAwareness();  // 开启ImGui对系统DPI的感知// 获取主显示器的DPI缩放比例// MonitorFromPoint获取主显示器的句柄// ImGui_ImplWin32_GetDpiScaleForMonitor计算该显示器的缩放比例float main_scale = ImGui_ImplWin32_GetDpiScaleForMonitor(::MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY));// 创建Windows窗口:ImGui需要一个窗口作为载体来显示UI// 定义窗口类结构,描述窗口的基本属性WNDCLASSEXW wc = {sizeof(wc),                  // 结构体大小CS_CLASSDC,                  // 窗口类风格,使用专属设备上下文WndProc,                     // 窗口消息处理函数0L, 0L,                      // 额外的类数据和窗口数据(未使用)GetModuleHandle(nullptr),    // 程序实例句柄nullptr, nullptr, nullptr, nullptr,  // 图标、光标、背景画刷等(使用默认)L"ImGui Example",            // 窗口类名,用于标识该窗口类nullptr                      // 小图标(使用默认)};::RegisterClassExW(&wc);  // 向系统注册窗口类// 创建窗口HWND hwnd = ::CreateWindowW(wc.lpszClassName,            // 窗口类名,必须与注册的类名一致L"Dear ImGui DirectX11 Example",  // 窗口标题栏显示的文本WS_OVERLAPPEDWINDOW,         // 窗口风格,标准可调整大小的窗口100, 100,                    // 窗口初始位置(屏幕左上角坐标)(int)(1280 * main_scale),    // 窗口宽度,根据DPI缩放(int)(800 * main_scale),     // 窗口高度,根据DPI缩放nullptr, nullptr,            // 父窗口句柄和菜单句柄(无)wc.hInstance, nullptr        // 程序实例句柄和额外数据(无));// 初始化DirectX 11渲染环境if (!CreateDeviceD3D(hwnd))  // 如果创建失败{CleanupDeviceD3D();  // 清理已创建的资源::UnregisterClassW(wc.lpszClassName, wc.hInstance);  // 注销窗口类return 1;  // 返回1表示程序异常退出}// 显示窗口(创建后窗口默认是隐藏的)::ShowWindow(hwnd, SW_SHOWDEFAULT);::UpdateWindow(hwnd);  // 刷新窗口,确保窗口立即显示// 初始化ImGui:创建UI上下文和配置IMGUI_CHECKVERSION();  // 检查ImGui版本,确保编译版本与运行时版本一致ImGui::CreateContext(); // 创建ImGui上下文,管理UI状态和资源ImGuiIO& io = ImGui::GetIO(); (void)io;  // 获取IO对象,管理输入输出// 配置ImGui功能io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // 开启键盘导航(方向键、Tab等)io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;   // 开启游戏手柄导航// 设置UI缩放:适配高DPI屏幕,避免UI元素过小ImGuiStyle& style = ImGui::GetStyle();style.ScaleAllSizes(main_scale);  // 缩放所有UI元素的大小style.FontScaleDpi = main_scale;  // 缩放字体大小// 初始化ImGui后端:连接ImGui与系统和渲染APIImGui_ImplWin32_Init(hwnd);       // 初始化Win32后端,处理窗口消息和输入ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);  // 初始化DX11后端,负责渲染UI// 程序状态变量:控制UI显示和存储用户输入数据bool show_demo_window = true;    // 是否显示ImGui演示窗口(未使用)bool show_another_window = false; // 是否显示另一个窗口(未使用)ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); // 窗口背景色(浅蓝色)ImVec4 seBan = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);       // 用于按钮颜色的变量// 输入框缓冲区:存储用户输入的文本char name[1024] = "";    // 用户名输入缓冲区,容量1024字节char pass[1024] = "";    // 密码输入缓冲区,容量1024字节char text[1024] = "";    // 备用文本缓冲区(未使用)// 多行输入框配置const size_t BUF_SIZE = 1024;                // 缓冲区最大容量char input_text[BUF_SIZE] = "1111...\n22222\n333";  // 初始文本内容// 主循环:程序的核心,持续运行直到用户关闭窗口bool done = false;  // 控制循环是否结束的标志while (!done){// 处理窗口消息:从消息队列中获取并处理所有待处理消息MSG msg;// PeekMessage非阻塞地获取消息,PM_REMOVE表示获取后从队列中移除while (::PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE)){::TranslateMessage(&msg);  // 翻译消息(如将键盘扫描码转换为字符)::DispatchMessage(&msg);   // 将消息分发到窗口的消息处理函数(WndProc)if (msg.message == WM_QUIT)  // 如果收到退出消息done = true;  // 标记循环结束}if (done)break;  // 退出主循环// 处理窗口遮挡:如果窗口被完全遮挡,减少渲染频率以节省资源if (g_SwapChainOccluded &&g_pSwapChain->Present(0, DXGI_PRESENT_TEST) == DXGI_STATUS_OCCLUDED){::Sleep(10);  // 休眠10毫秒continue;     // 跳过本次循环,不进行渲染}g_SwapChainOccluded = false;  // 重置遮挡状态// 处理窗口大小调整:当窗口大小改变时,调整渲染目标if (g_ResizeWidth != 0 && g_ResizeHeight != 0){CleanupRenderTarget();  // 先清理旧的渲染目标// 调整交换链缓冲区大小以匹配新的窗口尺寸g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight,DXGI_FORMAT_UNKNOWN, 0);g_ResizeWidth = g_ResizeHeight = 0;  // 重置尺寸变量CreateRenderTarget();  // 创建新的渲染目标}// 开始ImGui新帧:准备绘制UIImGui_ImplDX11_NewFrame();  // DX11后端准备新帧ImGui_ImplWin32_NewFrame(); // Win32后端准备新帧(处理输入)ImGui::NewFrame();          // ImGui核心准备,开始定义UI// 定义UI界面:创建一个名为"我的IMGui"的窗口bool is_window_open = true;  // 控制窗口是否显示的标志// ImGui::Begin()参数说明:// - 第一个参数:窗口标题,同时作为窗口的唯一标识// - 第二个参数:控制窗口是否显示的指针,关闭窗口时会设为false// - 第三个参数:窗口标志(默认为0,使用默认窗口样式)ImGui::Begin("我的IMGui", &is_window_open);// 显示自动换行的长文本ImGui::TextWrapped("This 521 ""aiamaiamaiamaiamaiamaiamaiamaiamaiamaiamaiam");// 显示带颜色的文本// ImGui::TextColored()参数:// - 第一个参数:ImVec4类型的颜色(RGBA,每个分量0.0f-1.0f)// - 后续参数:格式化字符串和参数(与printf类似)ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink");  // 粉色文本ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow");  // 黄色文本// 显示带颜色的文本和帮助标记,并在同一行ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink2");ImGui::SameLine();  // 让下一个控件与当前控件在同一行ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow2");ImGui::SameLine();HelpMarker("52am");  // 显示帮助标记,鼠标悬停显示"52am"// 颜色编辑控件:允许用户选择颜色// ImGui::ColorEdit3()参数:// - 第一个参数:控件标签// - 第二个参数:颜色变量的指针(需要转换为float*)// 选择的颜色会存储到seBan变量中ImGui::ColorEdit3("clear color", (float*)&seBan);// 修改按钮样式:临时改变按钮在不同状态下的颜色// ImGui::PushStyleColor()参数:// - 第一个参数:要修改的颜色类型(ImGuiCol_开头的枚举)// - 第二个参数:新的颜色值(ImVec4类型)ImGui::PushStyleColor(ImGuiCol_Button, seBan);           // 按钮正常状态颜色ImGui::PushStyleColor(ImGuiCol_ButtonHovered, { 1.0f,0.0f,0.0f,1.0f }); // 鼠标悬停状态ImGui::PushStyleColor(ImGuiCol_ButtonActive, { 0.0f,1.0f,0.0f,1.0f });  // 鼠标点击状态// 创建按钮:ImGui::Button()返回bool值,表示按钮是否被点击if (ImGui::Button("anNiu")) {// 按钮被点击时,显示黄色文本"dianjianniu"ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "dianjianniu");}// 恢复样式:弹出之前压入的3个颜色设置// 必须与PushStyleColor的数量一致,否则会影响其他UI元素ImGui::PopStyleColor(3);// 复选框:允许用户切换选项的开关状态// ImGui::Checkbox()参数:// - 第一个参数:复选框标签// - 第二个参数:bool变量的指针,存储复选框的状态(true=勾选,false=未勾选)static bool check = true;static bool check1 = true;static bool check2 = false;static bool check3 = true;ImGui::Checkbox("checkbox", &check);ImGui::Checkbox("checkbox1", &check1);ImGui::Checkbox("checkbox2", &check2);ImGui::Checkbox("checkbox3", &check3);// 单选框:从多个选项中选择一个// ImGui::RadioButton()参数:// - 第一个参数:单选框标签// - 第二个参数:当前选中项的索引指针// - 第三个参数:当前单选框的索引值static int radio_selected = 0;  // 存储选中项的索引ImGui::RadioButton("radio a", &radio_selected, 0); ImGui::SameLine();ImGui::RadioButton("radio b", &radio_selected, 1); ImGui::SameLine();ImGui::RadioButton("radio c", &radio_selected, 2);// 输入框:接收用户文本输入ImGui::Text("name");  // 显示"name"作为输入框的标签ImGui::SameLine();    // 与输入框在同一行// ImGui输入框的标识规则详解:// 1. 格式为"标签##标识符":显示"标签",但内部用"标识符"区分不同控件// 2. 格式为"##标识符":不显示标签,仅用"标识符"作为内部标识// 3. 无"##":整个字符串既作为显示标签,也作为内部标识// 这里"##name"表示:不显示标签,内部用"name"作为标识ImGui::InputText("##name", name, IM_ARRAYSIZE(name));ImGui::Text("pass");  // 显示"pass"作为密码框的标签ImGui::SameLine();// 密码输入框:ImGuiInputTextFlags_Password标志使输入内容显示为*ImGui::InputText("##pass", pass, IM_ARRAYSIZE(pass), ImGuiInputTextFlags_Password);ImGui::InputText("p2ass", pass, IM_ARRAYSIZE(pass), ImGuiInputTextFlags_Password);// 带提示的输入框:当输入框为空时显示提示文本char hint_text[1024] = "mo ren ti shi";  // 提示文本ImGui::InputTextWithHint("##InputTextWithHint", hint_text,name, IM_ARRAYSIZE(name));// 多行输入框:允许输入多行文本ImGui::InputTextMultiline("##MultiLineInput",  // 内部标识(不显示标签)input_text,          // 存储文本的缓冲区BUF_SIZE,            // 缓冲区最大容量ImVec2(0, 200)       // 输入框尺寸(宽度0表示自适应窗口,高度200像素));// 加static让f变成静态变量,静态变量在函数中只会执行一次// 第一次执行当前函数会执行 static float f = 0.0f; 这一行代码,第二次执行当前函数时会跳过 static float f = 0.0f;这一行代码// 这样就能修改f的值后不会被重新赋值成0了static float f = 0.0f;// 滑块ImGui::SliderFloat("float", &f, 0.0f, 1.0f);ImGui::SliderFloat("##float", &f, 0.0f, 1.0f);ImGui::End();  // 结束窗口定义(必须与ImGui::Begin配对使用)// 渲染UI:将定义的UI绘制到屏幕上ImGui::Render();  // 生成绘制命令列表// 计算背景色(考虑透明度)const float clear_color_with_alpha[4] = {clear_color.x * clear_color.w,clear_color.y * clear_color.w,clear_color.z * clear_color.w,clear_color.w};// 设置渲染目标:告诉GPU接下来的渲染输出到主渲染目标g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, nullptr);// 清空渲染目标:用背景色填充屏幕,清除上一帧的内容g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView,clear_color_with_alpha);// 渲染ImGui的UI:执行绘制命令ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());// 显示画面:交换前后缓冲区,将渲染好的画面显示到屏幕上// Present()参数:// - 第一个参数:1表示开启垂直同步(VSync),0表示关闭// - 第二个参数:交换标志(0表示默认行为)HRESULT hr = g_pSwapChain->Present(1, 0);  // 开启垂直同步// 检查交换链是否被遮挡,用于下一次循环的优化g_SwapChainOccluded = (hr == DXGI_STATUS_OCCLUDED);}// 程序退出:清理所有资源// 关闭ImGui后端ImGui_ImplDX11_Shutdown();ImGui_ImplWin32_Shutdown();ImGui::DestroyContext();  // 销毁ImGui上下文// 清理D3D资源CleanupDeviceD3D();// 销毁窗口和窗口类::DestroyWindow(hwnd);::UnregisterClassW(wc.lpszClassName, wc.hInstance);return 0;  // 程序正常退出
}


img


文章转载自:

http://HkTVaZy6.xLxmy.cn
http://wioW2aAk.xLxmy.cn
http://7hcWis4V.xLxmy.cn
http://Dv09PUBr.xLxmy.cn
http://rnRnpmPD.xLxmy.cn
http://cWXv3Can.xLxmy.cn
http://dyh6Akua.xLxmy.cn
http://tzQQAn8o.xLxmy.cn
http://jlf5NDm1.xLxmy.cn
http://x7Fc4cK0.xLxmy.cn
http://91W5gClp.xLxmy.cn
http://joG3UUiH.xLxmy.cn
http://XIH0HJ6v.xLxmy.cn
http://6Bwxuqvp.xLxmy.cn
http://92qQtGlZ.xLxmy.cn
http://OGXRelBq.xLxmy.cn
http://DTg5aKQ0.xLxmy.cn
http://7Lm03EbY.xLxmy.cn
http://fd1ugX2E.xLxmy.cn
http://0Q4db8K8.xLxmy.cn
http://nb4p80tk.xLxmy.cn
http://bXaS0QMg.xLxmy.cn
http://PMdFr3hA.xLxmy.cn
http://QzA2j8yW.xLxmy.cn
http://uJH90whi.xLxmy.cn
http://HUIda4SQ.xLxmy.cn
http://CRIzqwse.xLxmy.cn
http://z28nMybz.xLxmy.cn
http://WieyKtxV.xLxmy.cn
http://14eocZ9O.xLxmy.cn
http://www.dtcms.com/a/375342.html

相关文章:

  • 【知识库】计算机二级python操作题(一)
  • 【硬件-笔试面试题-78】硬件/电子工程师,笔试面试题(知识点:阻抗与容抗的计算)
  • 4.5Vue的列表渲染
  • 使用YOLO11进行路面裂缝检测
  • 常见并行概念解析
  • 9月9日
  • centos系统上部署安装minio
  • 下载CentOS 7——从阿里云上下载不同版本的 CentOS 7
  • 《预约一团乱麻?预约任务看板让你告别排班噩梦!宠物店效率翻倍指南》
  • Shell 脚本条件测试与 if 语句
  • 【倒数日子隐私收集】
  • Diamond基础4:仿真流程、添加原语IP核
  • Java入门级教程14——同步安全机制明锁
  • [JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
  • MongoDB vs MySQLNoSQL与SQL数据库的架构差异与选型指南
  • Vue框架技术详解——项目驱动概念理解【前端】【Vue】
  • mardown-it 有序列表ios序号溢出解决办法
  • 目前主流热门的agent框架
  • 如何验证邮箱是否有效?常见方法与工具推荐
  • Python 类型注释核心知识点:变量、函数 / 方法与 Union 类型分步解析
  • 端口转发实操
  • 【算法--链表】116.填充每个节点的下一个右侧节点指针--通俗讲解
  • html+js实现表格本地筛选
  • 领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
  • pyside6 的pdf显示测试 -- 01
  • 算法篇——动态规划【力扣Hot100】
  • 《WINDOWS 环境下32位汇编语言程序设计》第14章 异常处理
  • 中间件八股
  • thrust cub cccl 安装与应用示例
  • Expect-自动化交互工具