J-0-ImGui的语法学习

一、ImGui的简介

   简介:ImGui又称为Dear ImGui,它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGui的源码直接加到项目中,也可以编译成dll,ImGui使用DX或OpenGL进行界面渲染,对于画面质量要求较高,例如客户端游戏、4k/8k视频播放时,用ImGui是很好的选择。

简介参考:https://www.jb51.net/article/229827.htm
项目地址:https://github.com/ocornut/imgui

二、ImGui基础的语法

1、窗口的语法

  (1)创建窗口
ImGui::Begin("Hello, world!");
ImGui::End();

  (2)修改窗口的两种形式

   1)靠近的位置进行设置
 ImGui::Begin("1111");
 {
     //设置窗口位置
     ImVec2 pos = { 100, 100 };
     ImGui::SetWindowPos(pos); 
     ImVec2 nSize = { 300, 200 };
     ImGui::SetWindowSize(nSize);
 }

  2)第二种带名字的形式进行修改
  //设置窗口位置
 ImVec2 pos = { 100, 100 };
 ImGui::SetWindowPos("1111", pos);
 ImVec2 nSize = { 300, 200 };
 ImGui::SetWindowSize("1111", nSize);

 (3)实例
mGui::Begin("1111");
{
    设置窗口位置
    //ImVec2 pos = { 100, 100 };
    //ImGui::SetWindowPos(pos); 
    //ImVec2 nSize = { 300, 200 };
    //ImGui::SetWindowSize(nSize);
}
ImGui::End();
ImGui::Begin("2222");
{
    //设置窗口位置
    ImVec2 pos = { 100, 100+200+20 };
    ImGui::SetWindowPos(pos);
    ImVec2 nSize = { 300, 200 };
    ImGui::SetWindowSize(nSize);
}        
ImGui::End();
//设置窗口位置
ImVec2 pos = { 100, 100 };
ImGui::SetWindowPos("1111", pos);
ImVec2 nSize = { 300, 200 };
ImGui::SetWindowSize("1111", nSize);

2、按钮的语法

 (1)创建简单按钮
ImGui::Button(按钮题目, 按钮大小);

  1)只能响应左键点击的按钮
 bool IsClick = ImGui::Button("11111", ImVec2(80, 20));  
 if (IsClick)
 {
     MessageBoxA(NULL, "鼠标左键被按下了", 0, 0);
 }

image.png

 (2)扩展版本EX版本(需要头文件"imgui_internal.h")
ImGui::ButtonEx(按钮题目, 按钮大小,  具体的参数);
  1)创建响应右键的按钮
 bool IsClick2 = ImGui::ButtonEx("2222", ImVec2(160, 20), ImGuiButtonFlags_::ImGuiButtonFlags_MouseButtonRight);
  if (IsClick2)
  {
      MessageBoxA(NULL, "鼠标右键被按下了", 0, 0);
  }

image.png

3、文本按钮

  (1)创建单行文本框
 ImGui::InputText()

  1)简单的文本框
  char BuffText[256] = "Init Edit";
 ImGui::InputText("111", IN OUT BuffText, sizeof(BuffText));

image.png

   2)InputText的高級用法(创建过滤文本框)
char BuffText2[256] = "Init Edit";
ImGui::InputText("222", IN OUT BuffText2, sizeof(BuffText2), ImGuiInputTextFlags_CallbackCharFilter, testEditCallback);
static int testEditCallback(ImGuiInputTextCallbackData* data)
{

    printf("data->EventChar=%d buf=%s EventKey=%d EventFlag=%d\r\n",
        data->EventChar,
        data->Buf,
        data->EventKey,
        data->EventFlag
    );

    if (data->EventChar >= '0' && data->EventChar <= '9')
    {
        return 1; //过滤0~9 屏蔽掉输入
    }
    else
    {
        return 0;
    }
}

 (2)创建多行文本框
ImGui::InputTextMultiline(名称, 缓冲区, 缓冲区大小, 文本框大小);

   1)使用InputTextMultiline编写过滤多行文本框
char BuffText3[256] = "Init \n Edit";
ImGui::InputTextMultiline("Name", BuffText3, sizeof(BuffText3), ImVec2{ 200, 100 }, ImGuiInputTextFlags_CallbackCharFilter, testEditCallback);
 static int testEditCallback(ImGuiInputTextCallbackData* data)
{

    printf("data->EventChar=%d buf=%s EventKey=%d EventFlag=%d\r\n",
        data->EventChar,
        data->Buf,
        data->EventKey,
        data->EventFlag
    );

    if (data->EventChar >= '0' && data->EventChar <= '9')
    {
        return 1; //过滤0~9 屏蔽掉输入
    }
    else
    {
        return 0;
    }
}

4、复选框

 bool IsDown =  ImGui::Checkbox(描述, 状态);

  (1)编写简单的复选框
 static bool Checkstate = FALSE;
 bool IsDown =  ImGui::Checkbox(u8"文字描述", &Checkstate);
 if (IsDown)
 {
     if (Checkstate)
     {
         //选中时代码
         MessageBoxA(NULL, "被选中", 0, 0);
     }
     else
     {
         //未选中时代码
         MessageBoxA(NULL, "未被选中", 0, 0);
     }
 }

image.png

5、单选框

ImGui::RadioButton(标题, 条件)

  (1)v方式一:创建简单的复选框
  enum mymode
  {
      Mode1,
      Mode2,
      Mode3,
  };
  static mymode iValue;
  bool IsDown1 = ImGui::RadioButton(u8"单选框1", iValue == Mode1);
  ImGui::SameLine();       //与下一行显示在同一行
  bool IsDown2 = ImGui::RadioButton(u8"单选框2", iValue == Mode2);
  bool IsDown3 = ImGui::RadioButton(u8"单选框3", iValue == Mode3);
  if (IsDown1)
  {
      iValue = Mode1;
  }
  if (IsDown2)
  {
      iValue = Mode2;
  }
  if (IsDown3)
  {
      iValue = Mode3;
  }
   

image.png

  (2)方式二:创建条件的复选框
 bool IsDown = ImGui::RadioButton(标题, 输入输出缓冲区, 判断值);
 条件:  IsDown为True时,判断值输入到缓冲区中, 输入输出缓冲区 == 判断值 则被选
中,      
  static int Arg2 = 4;
 bool IsDown4 = ImGui::RadioButton(u8"单选框4", IN OUT & Arg2, Mode4);
 bool IsDown5 = ImGui::RadioButton(u8"单选框5", IN OUT & Arg2, Mode5);
 if (IsDown4 || IsDown5)
 {
     printf("%d\r\n", Arg2);
 }

6、菜单按钮

  ImGui::BeginMenu(u8"菜单名字")
  ImGui::EndMenu();
  ImGui::BeginMenuBar()
  ImGui::EndMenuBar();

  (1)方式一:创建简单的菜单按钮
 if (ImGui::BeginMenu(u8"菜单名字"))
 {
     if (ImGui::MenuItem(u8"1"))
     {
     }
     ImGui::MenuItem(u8"2");
     ImGui::MenuItem(u8"3");
     ImGui::MenuItem(u8"4", NULL, &Menu2, true);
     ImGui::EndMenu();
 };
 ImGui::End();

image.png

  (2)方式二:创建菜单的另一种方式
static bool Menu3 = false;
ImGui::Begin(u8"菜单测试", 0, ImGuiWindowFlags_MenuBar);
    {
        ImVec2 pos = { 100 , 100};
        ImGui::SetWindowPos(pos);
        ImVec2 nSize = { 300, 200 };
        ImGui::SetWindowSize(nSize);
        if (ImGui::BeginMenuBar())
        {
            //菜单
            if (ImGui::BeginMenu(u8"菜单名字"))
            {

                if (ImGui::MenuItem(u8"1"))
                {
                }
                ImGui::MenuItem(u8"2");
                ImGui::MenuItem(u8"3");
                ImGui::MenuItem(u8"4", NULL, &Menu3, true);
                ImGui::EndMenu();
               };
            ImGui::EndMenuBar();
        }
    }

image.png

7、List控件

ImGui::ListBox(列表标题,&输出选项, 列表名称地址, 数量)
ImGui::BeginListBox(列表标题)ImGui::EndListBox();

  (1)方式一:ListBox创建列表控件
ImGui::Begin(u8"List框测试2");
{
    ImVec2 pos = { 100 , 100 + 200 };
    ImGui::SetWindowPos(pos);
    ImVec2 nSize = { 300, 200 };
    ImGui::SetWindowSize(nSize);
    static int Number2 = 4;
    const char* items[] = { "11111", "22222", "33333", "44444", "5555", "66666", "7777", "888888", "999999" };
    ImGui::Text(u8"选中%d\r\n", Number2);
    ImGui::ListBox("listboxtext", &Number2, items, sizeof(items) / sizeof(char*) , -1);
}
ImGui::End();

image.png

 (2)方式二:BeginListBox创建列表控件
     ImGui::Begin(u8"List框测试");
    {
        ImVec2 pos = { 100 , 100};
        ImGui::SetWindowPos(pos);
        ImVec2 nSize = { 300, 200 };
        ImGui::SetWindowSize(nSize);

        static int Number = 4;
        const char* items[] = { "11111", "22222", "33333", "44444", "5555", "66666", "7777", "888888", "999999" };
        ImGui::Text(u8"选中%d\r\n", Number);
        if (ImGui::BeginListBox("ListBox"))
        {
            for (int n = 0; n < IM_ARRAYSIZE(items); n++)
            {
                const bool IsDown = (Number == n);
                if (ImGui::Selectable(items[n], Number))
                {
                    Number = n;
                }
                if (IsDown)
                {
                    ImGui::SetItemDefaultFocus();
                }
            }
            ImGui::EndListBox();
        }
  
    };
    ImGui::End();

image.png

8、TreeNode控件

 ImGui::TreeNode("List boxes")
 ImGui::TreePop();

 (1) 方式一:创建简单树结构
    ImGui::Begin(u8"List框测试");
    {
        ImVec2 pos = { 100 , 100};
        ImGui::SetWindowPos(pos);
        ImVec2 nSize = { 300, 200 };
        ImGui::SetWindowSize(nSize);

        static int Number = 4;
        const char* items[] = { "11111", "22222", "33333", "44444", "5555", "66666", "7777", "888888", "999999" };
        ImGui::Text(u8"选中%d\r\n", Number);
        if (ImGui::BeginListBox("ListBox"))
        {
            for (int n = 0; n < IM_ARRAYSIZE(items); n++)
            {
                const bool IsDown = (Number == n);
                if (ImGui::Selectable(items[n], Number))
                {
                    Number = n;
                }
                if (IsDown)
                {
                    ImGui::SetItemDefaultFocus();
                }
            }
            ImGui::EndListBox();
        }
  
    };
    ImGui::End();

image.png

9、页面控件

 ImGui::BeginTabBar(u8"页面组",  0)
 ImGui::EndTabBar();
ImGui::BeginTabItem(页标题)
 ImGui::EndTabItem();

  (1)方式一:BeginTabBar创建页面
	 ImGui::Begin(u8"页测试");
    {
        ImVec2 pos = { 100 , 100 + 200 };
        ImGui::SetWindowPos(pos);
        ImVec2 nSize = { 300, 200 };
        ImGui::SetWindowSize(nSize);

        if (ImGui::BeginTabBar(u8"页面组",  0))
        {
            if (ImGui::BeginTabItem(u8"页1"))
            {
                ImGui::EndTabItem();
            }
            if (ImGui::BeginTabItem(u8"页2"))
            {
                ImGui::EndTabItem();
            }
            if (ImGui::BeginTabItem(u8"页3"))
            {
                ImGui::EndTabItem();
            }
            if (ImGui::BeginTabItem(u8"页4"))
            {
                ImGui::EndTabItem();
            }


            ImGui::EndTabBar();
        }

    }
    ImGui::End();

image.png

 (2)方式二:CheckboxFlags + BeginTabBar组合使用
 static int Flag = 0;
  //各种功能开启
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_Reorderable", &Flag, ImGuiTabBarFlags_Reorderable);
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_AutoSelectNewTabs", &Flag, ImGuiTabBarFlags_AutoSelectNewTabs);
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_TabListPopupButton", &Flag, ImGuiTabBarFlags_TabListPopupButton);
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", &Flag, ImGuiTabBarFlags_NoCloseWithMiddleMouseButton);
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_NoTabListScrollingButtons", &Flag, ImGuiTabBarFlags_NoTabListScrollingButtons);
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_NoTooltip", &Flag, ImGuiTabBarFlags_NoTooltip);
  ImGui::CheckboxFlags(u8"ImGuiTabBarFlags_FittingPolicyResizeDown", &Flag, ImGuiTabBarFlags_FittingPolicyResizeDown);
      if (ImGui::BeginTabBar(u8"页面组"))
      {
          if (ImGui::BeginTabItem(u8"页1"))
          {
              ImGui::EndTabItem();
          }
          if (ImGui::BeginTabItem(u8"页2"))
          {
              ImGui::EndTabItem();
          }
          if (ImGui::BeginTabItem(u8"页3"))
          {
              ImGui::EndTabItem();
          }
          if (ImGui::BeginTabItem(u8"页4"))
          {
              ImGui::EndTabItem();
          }
      ImGui::EndTabBar();
  }

image.png

10、UI控件颜色设置

ImGui::PushStyleColor(ImGuiCol_Button, 0xFFFF0000);
ImGui::PopStyleColor();

 (1)方式一:修改按钮颜色
ImGui::Begin(u8"颜色测试");
{
    ImVec2 pos = { 100 , 100 + 200 };
    ImGui::SetWindowPos(pos);
    ImVec2 nSize = { 300, 200 };
    ImGui::SetWindowSize(nSize);
    ImGui::PushStyleColor(ImGuiCol_Button, 0xFFFF0000);
    ImGui::Button("test");
    ImGui::PopStyleColor() 
}

image.png

 ImGui::PushStyleColor(ImGuiCol_Text, 0xFF000FFF);
 ImGui::Text(u8"hahahahahahahahahah");
 ImGui::PopStyleColor();

image.png

11、滑块UI控件

 ImGui::SliderInt("名称", &返回值, 最小值,  最大值, 显示格式);

  (1)创建整数滑块
static int OutValue1 = 30;
static int OutValue2 = 30;
ImGui::SliderInt("slider int", &OutValue1, 1, 60);
ImGui::Text(u8"测试滑块 返回值=%d", OutValue1);
ImGui::SliderInt("slider int", &OutValue2, 1, 60, "~%X~");
ImGui::Text(u8"测试滑块 返回值=%d", OutValue2);

image.png

  (2)创建浮点数滑块
static float OutValue3 = 30;
ImGui::SliderFloat("slider int", &OutValue3, 1, 60.0f, "~%0.1f~");

image.png

12、进度条控件

ImGui::ProgressBar(数值, 控件大小);

  (1)方式一:创建精度条
 static float Value = 0.1f;
 Value = Value + 0.001f;
 ImGui::ProgressBar(Value, ImVec2(-1.0f, 0.0f));

image.png

三、ImGui的模态窗口和非模态窗口

  1、什么是模态窗口、什么是模态窗口

   所谓模态对话框,就是指除非采起有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性,用户能够在当前对话框以及其余窗口间进行切换。

  2、模态窗口的创建

 //创建模态窗口
 if (ImGui::BeginPopupModal("MyModalWindow", NULL, ImGuiWindowFlags_AlwaysAutoResize))
 {
     ImGui::Text(u8"我的第一个模态窗口");
     if (ImGui::Button(u8"退出"))
     {
         ImGui::CloseCurrentPopup();
     }
     //添加其他的UI控件
     ImGui::EndPopup();
 }
 //开启模态窗口
 if (ImGui::Button(u8"显示模态窗口"))
 {
     ImGui::OpenPopup("MyModalWindow");
 }

image.png

 3、非模态窗口的创建

 //非模态窗口创建
 if (ImGui::BeginPopup("MyWindow"))
 {
     ImGui::Text(u8"我的第一个非模态窗口");
     if (ImGui::Button(u8"退出"))
     {
         ImGui::CloseCurrentPopup();
     }
     //添加其他的UI控件
     ImGui::EndPopup();
}
 if (ImGui::Button(u8"显示非模态窗口"))
 {
     ImGui::OpenPopup("MyWindow");
 }

image.png

四、单元格的创建

  1、静态创建单元格
 ImGui::Begin(u8"表格测试");
{
    if (ImGui::BeginTable("table1", 8, ImGuiTableFlags_Borders))
    {
        for (int row = 0; row < 4; row++)
        {
            //转到下一行
            ImGui::TableNextRow();
            for (int column = 0; column < 8; column++)
            {
                //指定列
                ImGui::TableSetColumnIndex(column);
                //显示单元格 内容
                ImGui::Text(u8"单元 (%d,%d)", row, column); //单元格
            }
        }
        ImGui::EndTable();
    }
}
ImGui::End();

image.png

  2、动态创建单元格
ImGui::Begin(u8"表格测试");
{
    if (ImGui::BeginTable("table1", 3, ImGuiTableFlags_BordersInner))
    {
        for (int row = 0; row < 4; row++)
        {
            ImGui::TableNextRow();
            for (int column = 0; column < 3; column++)
            {
                ImGui::TableSetColumnIndex(column);
                char textid[265];
                sprintf_s(textid, u8"##单元格(%d,%d)", row, column);
                //添加
                ImGui::InputText(textid, Buf[row][column], 256); //单元格
            }
        }
        ImGui::EndTable();
        //标志位置0
        initonce = false;
        }

image.png

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SecureCRT脚本使用VBScript语法。VBScript是一种微软开发的脚本语言,它是Visual Basic的一部分,主要用于Windows操作系统上的脚本编写。在SecureCRT中,VBScript语法可以用于编写自动化脚本,实现自动化登录、执行命令、收集输出等功能。常用的VBScript语法包括变量定义、条件语句、循环语句、函数定义等。例如,以下是一个简单的VBScript脚本示例: ``` ' 定义变量 Dim strUsername, strPassword ' 输入用户名和密码 strUsername = "admin" strPassword = "password" ' 连接远程主机 crt.Session.Connect "/ssh2 /auth=password /user=" & strUsername & " /password=" & strPassword & " 192.168.1.1" ' 执行命令并收集输出 crt.Screen.Send "ls" & vbCr Do While crt.Screen.WaitForString("$") = 0 WScript.Sleep 100 Loop strOutput = crt.Screen.ReadString("$") ' 输出结果 MsgBox strOutput ``` 该脚本定义了两个变量strUsername和strPassword,然后使用这些变量连接到远程主机,并执行ls命令,最后将输出结果弹出消息框显示。 ### 回答2: SecureCRT 脚本可以使用多种编程语言编写,其中一种常用的是 VBScript(vbs)语言。VBScript 是一种微软开发的脚本语言,简单易学,同时也具有较强的处理能力。 SecureCRT 的 VBScript 常用语法包括: 1.创建一个新的 Session 对象 使用对象的 CreateObject 方法来创建一个新 Session 对象,语法如下: ``` Dim objSecureCRT, objSession Set objSecureCRT = CreateObject("SecureCRT.Application") Set objSession = objSecureCRT.Sessions.Add("/SSH2 /L user /PASSWORD password /C 3des /M hmac-sha1-96 /CN certificate /D ""directory"" hostname") ``` 其中 `/SSH2` 表示使用 SSH2 协议,`/L` 表示登录时使用的用户名,`/PASSWORD` 表示登录密码,`/C` 和 `/M` 分别表示加密算法和摘要算法, `/D` 表示工作目录,`hostname` 是要连接的主机名或IP地址。 2.向远程设备发送命令并获取返回结果 使用 Session 对象的 Send 和 WaitForString 方法向远程设备发送命令,并获取返回结果,语法如下: ``` objSession.Connect objSession.Send "command" & chr(13) strOutput = objSession.WaitForString("prompt") ``` 其中 `Connect` 方法用于连接远程设备,`Send` 方法用于向设备发送命令, `WaitForString` 方法用于等待设备返回结果,并将结果存储在 `strOutput` 变量中。 3.保存 SecureCRT 会话 使用 Session 对象的 Save 方法可以保存当前的 SecureCRT 会话,语法如下: ``` objSession.Save ``` 4.关闭 SecureCRT 会话 使用 Session 对象的 Close 方法可以关闭当前的 SecureCRT 会话,语法如下: ``` objSession.Close ``` 以上是 SecureCRT 脚本常用的 VBScript 语法,可以根据实际需求进行修改和扩展。同时,SecureCRT 还支持其他编程语言的脚本编写,例如 Perl、Python、JavaScript 等。 ### 回答3: SecureCRT是一种强大的终端模拟器,可以方便地与远程服务器进行通信。其中,SecureCRT脚本是一种用于自动化执行特定任务的代码,可以帮助用户提高工作效率。 SecureCRT脚本是使用VBScript语言编写的,VBScript是一种 Visual Basic语言的轻量级版本。在SecureCRT脚本中,VBScript可用于创建变量、条件语句、循环结构、函数、模块等元素,可实现自动登录、自动执行命令、修改配置等Automate脚本,大大提高日常工作效率。 SecureCRT脚本中的VBScript语法包括以下几个方面: 1.十六进制表示 在SecureCRT脚本中,可以使用VBScript中的类似"CInt"、"CLng"、"CDbl"、"Hex"等来实现十进制和十六进制之间的转换。 2.正则表达式 正则表达式是一种用于匹配特定模式的语法,SecureCRT脚本也支持正则表达式。可以使用VBScript中的"RegExp"函数来实现正则表达式功能。 3.文件操作 SecureCRT脚本也支持文件操作,包括打开、保存、读取、写入文件等功能。可以使用VBScript中的“FileSystemObject”对象来实现文件操作功能。 4.网络通信 SecureCRT脚本中也支持网络通信,包括使用Telnet、SSH等协议访问远程服务器,并可实现自动化登录、执行命令等操作。 总的来说,SecureCRT脚本中的VBScript语法具有灵活性、可扩展性和易用性,可帮助用户实现各种自动化操作,提高工作效率,减少重复性劳动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值