LorianS1
Новичок
- 8
- 4
How to do this in C++?
Lua:local inicfg = require "inicfg" local color = imgui.ImFloat4(mainIni.color.R/255, mainIni.color.G/255, mainIni.color.B/255, 255) if imgui.ColorEdit4('Color', color) then local clr = join_argb(0, color.v[1] * 255, color.v[2] * 255, color.v[3] * 255, color.v[4] * 255) local r,g,b,a = color.v[1] * 255, color.v[2] * 255, color.v[3] * 255, color.v[4] * 255 mainIni.config.hex = ("%06X"):format(clr) mainIni.color.R = r mainIni.color.G = g mainIni.color.B = b inicfg.save(mainIni, directIni) end
C++:
#include <iostream>
#include <Windows.h>
#include <string>
#include <sstream>
#include <iomanip>
#include "inih/INIReader.h"
#include "imgui/imgui.h"
// A function that combines the values of the color components into a single number
DWORD JoinARGB(BYTE a, BYTE r, BYTE g, BYTE b)
{
return ((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF);
}
int main()
{
INIReader mainIni("config.ini");
ImVec4 color(mainIni.GetReal("color", "R", 0) / 255.0f, mainIni.GetReal("color", "G", 0) / 255.0f, mainIni.GetReal("color", "B", 0) / 255.0f, 1.0f);
if (ImGui::ColorEdit4("Color", (float*)&color))
{
DWORD clr = JoinARGB(0, static_cast<BYTE>(color.x * 255), static_cast<BYTE>(color.y * 255), static_cast<BYTE>(color.z * 255));
mainIni.Set("config", "hex", ("#%02X%02X%02X").c_str(), static_cast<BYTE>(color.x * 255), static_cast<BYTE>(color.y * 255), static_cast<BYTE>(color.z * 255));
mainIni.SetReal("color", "R", static_cast<double>(color.x * 255));
mainIni.SetReal("color", "G", static_cast<double>(color.y * 255));
mainIni.SetReal("color", "B", static_cast<double>(color.z * 255));
mainIni.SaveFile("config.ini");
}
return 0;
}