aa7481542 2024-10-05 13:22 采纳率: 16.7%
浏览 15
已结题

VS2022 C++的相关代码问题咨询

请问如下如何让它纵向显示,现在默认是横向显示
现在是这样显示:视觉 自动 分组 本机 共享 设置
如何使他这样显示:
视觉
自动
分组
本机
共享
设置

感谢指点。



```c++
#pragma once
#include <DMALibrary/Memory/Memory.h>
#include <Common/Data.h>
#include <Common/Entitys.h>
#include <Common/Config.h>
#include <Utils/Utils.h>
#include <Utils/Throttler.h>
#include <imgui/imgui.h>
#include <imgui/imgui_settings.h>
#include <Utils/KmBox.h>
#include <Utils/KmBoxNet.h>
#include <Utils/Lurker.h>
#include <Utils/MoBox.h>
#include "MenuPlayerLists.h"
#include "MenuAimBot.h"
#include "MenuItem.h"
#include "MenuESP.h"
#include "MenuWebRadar.h"
class Menu
{
public:
    static void DrawMain(const ImFontAtlas* FontAtlas)
    {
        ImGui::PushFont(FontAtlas->Fonts[3]);

        MenuPlayerLists::Render(FontAtlas);

        ImGui::PopFont();
        if (GameData.Config.Window.Setting)
        {
            ImGui::PushFont(FontAtlas->Fonts[2]);
            const ImVec2 Spacing = ImGui::GetStyle().ItemSpacing;
            ImGui::SetNextWindowViewport(ImGui::GetMainViewport()->ID);
            ImGui::SetNextWindowSize({ Style::Window::Size.x + Spacing.x, Style::Window::Size.y + Spacing.y });

            ImGui::Begin("MENU", &GameData.Config.Window.Setting, ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize);
            {
                ImVec2 Pos = ImGui::GetWindowPos();
                ImVec2 OPos = Pos;
                Pos.x += Spacing.x / 2;
                Pos.y += Spacing.y / 2;

                ImGui::GetWindowDrawList()->AddRectFilled(Pos, ImVec2(Pos.x + Style::Window::Size.x, Pos.y + Style::Window::Size.y), ImGui::GetColorU32(Style::Window::Background), Style::Window::Rounding);
                ImGui::SetCursorPos(ImVec2(Style::Padding + Spacing.x / 2, Style::Padding));
                ImGui::PushFont(FontAtlas->Fonts[1]);
                ImGui::Text(U8("自定义"));
                ImGui::PopFont();

                const char* NameTabs[] = { U8("视觉"), U8("自动"), U8("分组"), U8("本机"), U8("共享"), U8("设置")};
                static int SelectedTab = 0;
                ImGui::SetCursorPos(ImVec2(Style::Padding + Spacing.x / 2, 60));
                ImGui::BeginGroup();
                {
                    for (int i = 0; i < sizeof(NameTabs) / sizeof(NameTabs[0]); i++){
                        if (ImGui::Tab(i == SelectedTab, NameTabs[i], Style::Tab::Size)) SelectedTab = i;
                        if (i < sizeof(NameTabs) / sizeof(NameTabs[0]) - 1) ImGui::SameLine();  
                }
                ImGui::EndGroup();

                ImGui::SetCursorPos(ImVec2(Style::Tab::Size.x + (Style::Padding + Spacing.x / 2) * 3 - 3 - 7, Style::Padding * 2));

                ImGui::BeginGroup();
                {
                    //Pos.x += Style::Tab::Size.x + (Style::Padding + Spacing.x / 2) * 2 - 8;
                    //Pos.y += Style::Padding;
                    //ImGui::GetWindowDrawList()->AddRectFilled(Pos, ImVec2(Pos.x + Style::Window::Size.x - Style::Tab::Size.x - Style::Padding * 2 - Style::Padding + 3, Pos.y + Style::Window::Size.y - Style::Padding * 2), ImGui::GetColorU32(Style::Layout::Background), Style::Window::Rounding);

         /*           ImGui::PushFont(FontAtlas->Fonts[1]);
                    ImGui::Text(NameTabs[SelectedTab]);
                    ImGui::PopFont();

                    ImGui::Dummy(ImVec2(0, 10.f));*/

                    if (SelectedTab == 0)
                    {
                        MenuESP::Render();
                    }

                    if (SelectedTab == 1) {
                        MenuAimBot::Render();
                    }

                    if (SelectedTab == 2) {
                        MenuItem::Render();
                    }

                    if (SelectedTab == 3) {
                        ImGuiStyle* ImStyle = &ImGui::GetStyle();
                        if (GameData.Config.ESP.MinMap)
                        {
                            if (ImGui::Button(U8("关闭"), ImVec2(ImGui::GetContentRegionMax().x - ImStyle->WindowPadding.x, 25)))
                                GameData.Config.ESP.MinMap = false;
                        }
                        else {
                            if (ImGui::Button(U8("启用"), ImVec2(ImGui::GetContentRegionMax().x - ImStyle->WindowPadding.x, 25))) {
                                GameData.Config.ESP.MinMap = true;
                            }
                        }
                    }
                    if (SelectedTab == 4) {
                        MenuWebRadar::Render();
                    }

                    if (SelectedTab == 5) {
                        ImGuiStyle* ImStyle = &ImGui::GetStyle();

                        ImGui::BeginGroup();
                        {
                            ImGui::BeginChild("O", U8("设置"), ImVec2(276, 170));
                            {
                                ImGui::Keybind(U8("模式"), &GameData.Config.ESP.FocusModeKey, true);
                                ImGui::Keybind(U8("缓存"), &GameData.Config.Function.ClearKey, true);
                                ImGui::NewCheckbox(U8("文字"), &GameData.Config.ESP.Stroke);
                            }
                            ImGui::EndChild();
                        }
                        ImGui::EndGroup();

                        ImGui::SameLine();
                        ImGui::SetCursorPos(ImVec2(ImGui::GetCursorPos().x + 7, ImGui::GetCursorPos().y));

                        ImGui::BeginGroup();
                        {
                            ImGui::BeginChild("O", U8("配置"), ImVec2(276, 170));
                            {
                                if (ImGui::Button(U8("载入配置"), ImVec2(ImGui::GetContentRegionMax().x - ImStyle->WindowPadding.x, 25))) 
                                {
                                    Config::Load();
                                }
                                if (ImGui::Button(U8("保存配置"), ImVec2(ImGui::GetContentRegionMax().x - ImStyle->WindowPadding.x, 25))) 
                                {
                                    Config::Save();
                                }
                            }
                            ImGui::EndChild();
                        }
                        ImGui::EndGroup();
                    }



                }
                ImGui::EndGroup();
                
            }
            ImGui::End();
            ImGui::PopFont();
        }
    }
};

```

  • 写回答

11条回答 默认 最新

  • 杨同学* 2024-10-05 15:15
    关注

    该回答引用ChatGPT4o及杨同学*共同作答, 如有帮助,还请采纳。
    在你的代码中,ImGui::SameLine() 是导致标签("视觉"、"自动"、"分组"等)横向排列的原因。为了实现纵向排列,你需要去掉 ImGui::SameLine(),这样每个标签就会自动在新的一行上显示。

    具体修改如下:

    修改代码:

    ImGui::BeginGroup();
    {
        for (int i = 0; i < sizeof(NameTabs) / sizeof(NameTabs[0]); i++) {
            if (ImGui::Tab(i == SelectedTab, NameTabs[i], Style::Tab::Size)) 
                SelectedTab = i;
            
            // 去掉这行 SameLine 代码,确保每个按钮在新的一行显示
            // if (i < sizeof(NameTabs) / sizeof(NameTabs[0]) - 1) ImGui::SameLine();  
        }
    }
    ImGui::EndGroup();
    

    解释:

    • **去掉 ImGui::SameLine()**:ImGui::SameLine() 会让元素在同一行显示,去掉它后,ImGui::Tab 函数生成的每个按钮会按默认的纵向排列方式显示。
    • 这样每个标签("视觉"、"自动"、"分组" 等)将会在新的一行上显示,从而实现纵向排列的效果。

    如果需要增加间距:

    如果你需要在标签之间增加一些垂直的间距,可以使用 ImGui::Dummy(ImVec2(0, spacing)),比如:

    ImGui::BeginGroup();
    {
        for (int i = 0; i < sizeof(NameTabs) / sizeof(NameTabs[0]); i++) {
            if (ImGui::Tab(i == SelectedTab, NameTabs[i], Style::Tab::Size)) 
                SelectedTab = i;
            
            if (i < sizeof(NameTabs) / sizeof(NameTabs[0]) - 1) 
                ImGui::Dummy(ImVec2(0, 10));  // 在每个Tab之间添加10个单位的垂直间距
        }
    }
    ImGui::EndGroup();
    

    这个代码会在每个标签之间加上一些空白,让界面看起来更加整齐。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 10月13日
  • 已采纳回答 10月5日
  • 修改了问题 10月5日
  • 修改了问题 10月5日
  • 展开全部