push me to the edge
-
Автор темы
- #1
Всем привет, последние время на форуме задают очень часто вопросы по типу "Как переместить табы влево"
Ну приступим.
Для начала надо зайти в файл CMenu.h
После чего копируем следующий код
Ну приступим.
Для начала надо зайти в файл CMenu.h
После чего копируем следующий код
bool get_system_font_path(const std::string& name, std::string& path)
{
//
// This code is not as safe as it should be.
// Assumptions we make:
// -> GetWindowsDirectoryA does not fail.
// -> The registry key exists.
// -> The subkeys are ordered alphabetically
// -> The subkeys name and data are no longer than 260 (MAX_PATH) chars.
//
char buffer[MAX_PATH];
HKEY registryKey;
GetWindowsDirectoryA(buffer, MAX_PATH);
std::string fontsFolder = buffer + std::string("\\Fonts\\");
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, ®istryKey)) {
return false;
}
uint32_t valueIndex = 0;
char valueName[MAX_PATH];
uint8_t valueData[MAX_PATH];
std::wstring wsFontFile;
do {
uint32_t valueNameSize = MAX_PATH;
uint32_t valueDataSize = MAX_PATH;
uint32_t valueType;
auto error = RegEnumValueA(
registryKey,
valueIndex,
valueName,
reinterpret_cast<DWORD*>(&valueNameSize),
0,
reinterpret_cast<DWORD*>(&valueType),
valueData,
reinterpret_cast<DWORD*>(&valueDataSize));
valueIndex++;
if (error == ERROR_NO_MORE_ITEMS) {
RegCloseKey(registryKey);
return false;
}
if (error || valueType != REG_SZ) {
continue;
}
if (_strnicmp(name.data(), valueName, name.size()) == 0) {
path = fontsFolder + std::string((char*)valueData, valueDataSize);
RegCloseKey(registryKey);
return true;
}
} while (true);
return false;
}
namespace CMenu
{
bool legitTab = true;
bool visualsTab = false;
bool radarTab = false;
bool changerTab = false;
bool colorsTab = false;
bool miscTab = false;
bool visEspTab = true;
bool visChamsTab = false;
bool visHandsTab = false;
bool visMiscTab = false;
int windowWidth = 800;
int windowHeight = 525;
int curWidth = 1;
int curHeight = 1;
int curX = 0;
int curY = 0;
int tabHeight = 35;
LONGLONG LastFrameTime;
float deltaTime;
LONGLONG milliseconds_now() {
static LARGE_INTEGER s_frequency;
static BOOL s_use_qpc = QueryPerformanceFrequency(&s_frequency);
if (s_use_qpc) {
LARGE_INTEGER now;
QueryPerformanceCounter(&now);
return (1000LL * now.QuadPart) / s_frequency.QuadPart;
}
else {
return GetTickCount();
}
}
float GetDeltaTime()
{
LONGLONG ms = milliseconds_now();
float ret = ms - LastFrameTime;
LastFrameTime = ms;
return ret;
//return 1000.0f / ImGui::GetIO().Framerate;
}
int CalcTabWidth(int tabs)
{
ImGuiStyle& style = ImGui::GetStyle();
return ((windowWidth - (style.WindowPadding.x * 2)) / tabs) - (style.ItemSpacing.x * tabs);
//return (curWidth - ((style.WindowPadding.x) + (style.ItemSpacing.x * tabs))) / tabs;
//return windowWidth / tabs;
}
void SelectTab(bool* tab)
{
legitTab = false;
visualsTab = false;
radarTab = false;
changerTab = false;
colorsTab = false;
miscTab = false;
*tab = true;
}
void SelectVisualsSubTab(bool* tab)
{
visEspTab = false;
visChamsTab = false;
visHandsTab = false;
visMiscTab = false;
*tab = true;
}
bool DrawTab(char* name, int tabWidth, int tabHeight, bool *boole, bool forceTabs = true)
{
bool ret = false;
if (ImGui::Tab(name, ImVec2(tabWidth, tabHeight), *boole))
{
ret = true;
*boole = true;
if (forceTabs) SelectTab(boole);
}
//ImGui::SameLine(0);
return ret;
}
bool DrawTab(char* name, int tabWidth, int tabHeight, bool boole, bool forceTabs = true)
{
return DrawTab(name, tabWidth, tabHeight, &boole, forceTabs);
}
void DrawTabs()
{
int w, h;
Interface.Engine->GetScreenSize(w, h);
if (ImGui::Begin(XorStr("Your name"), &G::MenuOpened, ImVec2(700, 380), 1.0F, ImGuiWindowFlags_ShowBorders))
{
//ImGui::NewLine(3);
ImGuiContext* io = ImGui::GetCurrentContext();
ImGuiStyle& style = ImGui::GetStyle();
int tabWidth = CalcTabWidth(6) + 20;
float lastSize = io->FontSize;
io->FontSize = 20;
ImGui::BeginGroup(); //создаем группу объектовa
DrawTab(XorStr("Legit"), tabWidth, tabHeight, &legitTab);
DrawTab(XorStr("Visuals"), tabWidth, tabHeight, &visualsTab);
DrawTab(XorStr("Radar"), tabWidth, tabHeight, &radarTab);
DrawTab(XorStr("Paints"), tabWidth, tabHeight, &changerTab);
DrawTab(XorStr("Colors"), tabWidth, tabHeight, &colorsTab);
DrawTab(XorStr("Misc"), tabWidth, tabHeight, &miscTab);
io->FontSize = lastSize;
ImGui::Text(XorStr("Config"));
if (ImGui::Button(XorStr("Load"), ImVec2(120, 0))) Config::Read();
if (ImGui::Button(XorStr("Save"), ImVec2(120, 0))) Config::Save();
ImGui::EndGroup(); //объединяем объекты в группу
ImGui::SameLine(/*posX*/); //сдвигаем фрейм в право
ImGui::BeginGroup(); //создаем новую группу объектов
//ImGui::EndGroup(); //объединяем объекты в группу
}
//ImGui::End();
}
{
//
// This code is not as safe as it should be.
// Assumptions we make:
// -> GetWindowsDirectoryA does not fail.
// -> The registry key exists.
// -> The subkeys are ordered alphabetically
// -> The subkeys name and data are no longer than 260 (MAX_PATH) chars.
//
char buffer[MAX_PATH];
HKEY registryKey;
GetWindowsDirectoryA(buffer, MAX_PATH);
std::string fontsFolder = buffer + std::string("\\Fonts\\");
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, ®istryKey)) {
return false;
}
uint32_t valueIndex = 0;
char valueName[MAX_PATH];
uint8_t valueData[MAX_PATH];
std::wstring wsFontFile;
do {
uint32_t valueNameSize = MAX_PATH;
uint32_t valueDataSize = MAX_PATH;
uint32_t valueType;
auto error = RegEnumValueA(
registryKey,
valueIndex,
valueName,
reinterpret_cast<DWORD*>(&valueNameSize),
0,
reinterpret_cast<DWORD*>(&valueType),
valueData,
reinterpret_cast<DWORD*>(&valueDataSize));
valueIndex++;
if (error == ERROR_NO_MORE_ITEMS) {
RegCloseKey(registryKey);
return false;
}
if (error || valueType != REG_SZ) {
continue;
}
if (_strnicmp(name.data(), valueName, name.size()) == 0) {
path = fontsFolder + std::string((char*)valueData, valueDataSize);
RegCloseKey(registryKey);
return true;
}
} while (true);
return false;
}
namespace CMenu
{
bool legitTab = true;
bool visualsTab = false;
bool radarTab = false;
bool changerTab = false;
bool colorsTab = false;
bool miscTab = false;
bool visEspTab = true;
bool visChamsTab = false;
bool visHandsTab = false;
bool visMiscTab = false;
int windowWidth = 800;
int windowHeight = 525;
int curWidth = 1;
int curHeight = 1;
int curX = 0;
int curY = 0;
int tabHeight = 35;
LONGLONG LastFrameTime;
float deltaTime;
LONGLONG milliseconds_now() {
static LARGE_INTEGER s_frequency;
static BOOL s_use_qpc = QueryPerformanceFrequency(&s_frequency);
if (s_use_qpc) {
LARGE_INTEGER now;
QueryPerformanceCounter(&now);
return (1000LL * now.QuadPart) / s_frequency.QuadPart;
}
else {
return GetTickCount();
}
}
float GetDeltaTime()
{
LONGLONG ms = milliseconds_now();
float ret = ms - LastFrameTime;
LastFrameTime = ms;
return ret;
//return 1000.0f / ImGui::GetIO().Framerate;
}
int CalcTabWidth(int tabs)
{
ImGuiStyle& style = ImGui::GetStyle();
return ((windowWidth - (style.WindowPadding.x * 2)) / tabs) - (style.ItemSpacing.x * tabs);
//return (curWidth - ((style.WindowPadding.x) + (style.ItemSpacing.x * tabs))) / tabs;
//return windowWidth / tabs;
}
void SelectTab(bool* tab)
{
legitTab = false;
visualsTab = false;
radarTab = false;
changerTab = false;
colorsTab = false;
miscTab = false;
*tab = true;
}
void SelectVisualsSubTab(bool* tab)
{
visEspTab = false;
visChamsTab = false;
visHandsTab = false;
visMiscTab = false;
*tab = true;
}
bool DrawTab(char* name, int tabWidth, int tabHeight, bool *boole, bool forceTabs = true)
{
bool ret = false;
if (ImGui::Tab(name, ImVec2(tabWidth, tabHeight), *boole))
{
ret = true;
*boole = true;
if (forceTabs) SelectTab(boole);
}
//ImGui::SameLine(0);
return ret;
}
bool DrawTab(char* name, int tabWidth, int tabHeight, bool boole, bool forceTabs = true)
{
return DrawTab(name, tabWidth, tabHeight, &boole, forceTabs);
}
void DrawTabs()
{
int w, h;
Interface.Engine->GetScreenSize(w, h);
if (ImGui::Begin(XorStr("Your name"), &G::MenuOpened, ImVec2(700, 380), 1.0F, ImGuiWindowFlags_ShowBorders))
{
//ImGui::NewLine(3);
ImGuiContext* io = ImGui::GetCurrentContext();
ImGuiStyle& style = ImGui::GetStyle();
int tabWidth = CalcTabWidth(6) + 20;
float lastSize = io->FontSize;
io->FontSize = 20;
ImGui::BeginGroup(); //создаем группу объектовa
DrawTab(XorStr("Legit"), tabWidth, tabHeight, &legitTab);
DrawTab(XorStr("Visuals"), tabWidth, tabHeight, &visualsTab);
DrawTab(XorStr("Radar"), tabWidth, tabHeight, &radarTab);
DrawTab(XorStr("Paints"), tabWidth, tabHeight, &changerTab);
DrawTab(XorStr("Colors"), tabWidth, tabHeight, &colorsTab);
DrawTab(XorStr("Misc"), tabWidth, tabHeight, &miscTab);
io->FontSize = lastSize;
ImGui::Text(XorStr("Config"));
if (ImGui::Button(XorStr("Load"), ImVec2(120, 0))) Config::Read();
if (ImGui::Button(XorStr("Save"), ImVec2(120, 0))) Config::Save();
ImGui::EndGroup(); //объединяем объекты в группу
ImGui::SameLine(/*posX*/); //сдвигаем фрейм в право
ImGui::BeginGroup(); //создаем новую группу объектов
//ImGui::EndGroup(); //объединяем объекты в группу
}
//ImGui::End();
}
И вставляем в свой файл начиная с самого начала
Также нужно вам разобраться с этими строчками
Также нужно вам разобраться с этими строчками
namespace CMenu
{
bool legitTab = true;
bool visualsTab = false;
bool radarTab = false;
bool changerTab = false;
bool colorsTab = false;
bool miscTab = false;
{
bool legitTab = true;
bool visualsTab = false;
bool radarTab = false;
bool changerTab = false;
bool colorsTab = false;
bool miscTab = false;
Предварительно замените все названия на свои !!!
Enjoy!
Enjoy!
P.S Не стоит писать что уже было и кидать кучу тем где просто оставляют код. Я сделал гайд для новичков которые хотят видеть табы слева.