a13799218151 发表于 2020-2-16 19:33

IMGUI二级菜单

本帖最后由 a13799218151 于 2020-11-8 17:09 编辑

## 菜单预览







## 菜单控制

通过 ↑ ↓ 控制 菜单上下移动
通过 ← → 控制 菜单展开,缩进或者是功能的开和关。

## 修改功能

项目的结构


项目中有一个config.json文件夹,程序每一次启动的时候都会读取和解析这个文件夹,并根据里面的数据解析成可视的菜单结构。

### config.json 数据结构
```
{
      "title": "IMGUI分级菜单DEMO",
      "items": [
                {
                        "title": "透视设置",
                        "resultCode": 100,
                        "secondItems": [
                              {
                                        "title": "方框透视",
                                        "resultCode": 101,
                                        "status": []
                              },
                              {
                                        "title": "方框类型",
                                        "resultCode": 102,
                                        "status": [
                                                "2D",
                                                "3D"
                                        ]
                              },
                              {
                                        "title": "显示血量",
                                        "resultCode": 103,
                                        "status": []
                              }
                        ]
                },
                {
                        "title": "自瞄设置",
                        "resultCode": 200,
                        "secondItems": [
                              {
                                        "title": "自动瞄准",
                                        "resultCode": 201,
                                        "status": []
                              },
                              {
                                        "title": "自瞄灵敏",
                                        "resultCode": 202,
                                        "status": [
                                                "0.05",
                                                "0.10",
                                                "0.15",
                                                "0.20",
                                                "0.25",
                                                "0.30",
                                                "0.35",
                                                "0.40",
                                                "0.45",
                                                "0.50",
                                                "0.55",
                                                "0.60",
                                                "0.65",
                                                "0.70",
                                                "0.75",
                                                "0.80",
                                                "0.85",
                                                "0.90",
                                                "0.95",
                                                "1.00"
                                        ]
                              },
                              {
                                        "title": "自瞄范围",
                                        "resultCode": 205,
                                        "status": [
                                                "60",
                                                "120",
                                                "180",
                                                "240",
                                                "300",
                                                "360"
                                        ]
                              },
                              {
                                        "title": "自瞄位置",
                                        "resultCode": 206,
                                        "status": [
                                                "头部",
                                                "胸部",
                                                "裆部"
                                        ]
                              }
                        ]
                },
                {
                        "title": "其他设置",
                        "resultCode": 0,
                        "secondItems": [
                              {
                                        "title": "安全退出",
                                        "resultCode": 1,
                                        "status": []
                              }
                        ]
                }
      ]
}
```’

items里面的节点是一级菜单,
secondItems里面的节点是二级菜单。

一级菜单的相关字段
|字段      |      描述    |
| ------------- |:-------------:|
| title      | 功能名称 |
| resultCode      | 回调码   |
| secondItems |二级菜单      |


二级菜单的相关字段
| 字段      | 描述         |
| ------------- |:-------------:|
| title      | 功能名称 |
| resultCode      | 回调码   |
| status |功能状态      |

## 回调事件

功能的开和关必然会产生一个回调事件.我们前面通过设置resultCode来辨别是哪个功能产生的事件。
下面我们来设置回调事件。
MenuManger.cpp里面有一个menuStatusChangedListener回调函数,我们在里面设置回调事件。


```
//菜单回调函数
void menuStatusChangedListener(int resultCode, bool isOpen, std::string title, std::string statusTitle) {


    switch (resultCode) {
    case 0:
      if (isOpen)
      {
            std::cout << "透视设置 打开" << std::endl;
      }
      else {
            std::cout << "透视设置 关闭" << std::endl;
      }
      break;


    case 9:

      if (isOpen)
      {
            std::cout << "自动瞄准 打开" << std::endl;
      }
      else {
            std::cout << "自动瞄准 关闭" << std::endl;
      }
      break;


      break;


    case 12:

      if (isOpen)
      {
            std::cout << "自动热键 打开 按键:" << statusTitle << std::endl;
      }
      else {
            std::cout << "自动热键 关闭" << std::endl;
      }
      break;


    case 13:

      if (isOpen)
      {
            std::cout << "自瞄范围 打开 范围:"<< statusTitle << std::endl;
      }
      else {
            std::cout << "自瞄范围 关闭" << std::endl;
      }
      break;

    case 15:
      if (isOpen)
      {
            std::cout << "辅助准心 打开" << std::endl;
      }
      else {
            std::cout << "辅助准心 关闭" << std::endl;
      }
      break;
      break;
    }


}
```

## 运行环境

运行环境就是imgui demo运行的环境。

本机环境如下:**Direct X && VS Studio 2019**


## 下载链接

因为项目有20多兆 上传不了我放在百度网盘里了。

a13799218151 发表于 2020-2-16 20:58

Fasy丶逝言 发表于 2020-2-16 20:19
我想问一下楼主,绘制透视D3D和IMGUI哪个比较好

当然是IMGUI好,IMGUI很方便

a13799218151 发表于 2020-2-16 19:37

本帖最后由 a13799218151 于 2020-2-16 19:51 编辑

希望大家支持一下 第一次发帖....

Fasy丶逝言 发表于 2020-2-16 20:19

我想问一下楼主,绘制透视D3D和IMGUI哪个比较好

ShineZhong 发表于 2020-2-16 20:29

强。。。。。。。。。。。。

383235464 发表于 2020-2-17 13:36

有易语言的吗。。。。。。。。。。

a13799218151 发表于 2020-2-17 17:03

383235464 发表于 2020-2-17 13:36
有易语言的吗。。。。。。。。。。

小兄弟,易语言我不懂欸

mzlailinying 发表于 2020-2-17 19:23

强。。。。。。。。。。。。

mosar_zh 发表于 2020-2-18 14:12

弓虽。。。。。点赞。。。。

卡农变奏 发表于 2020-2-18 14:14

现在还能用吗
页: [1] 2
查看完整版本: IMGUI二级菜单