介绍

  • 本文将介绍 使用 TabBox的用法
  • 更多用法,请参考源码

TabBox.h 文件

文件中定义了公有接口,其中包括,添加tab页下的控件,删除、设置TabBox的属性

其中,我常用的有:GetCurSelSelectItemSetAttribute

其中,源码如下, 注释很完备,一看就看懂

/// 重写父类方法,提供个性化功能,请参考父类声明
virtual bool Add(Control* pControl) override;
virtual bool AddAt(Control* pControl, std::size_t iIndex) override;
virtual bool Remove(Control* pControl) override;
virtual bool RemoveAt(std::size_t iIndex) override;
virtual void RemoveAll() override;
virtual void SetAttribute(const std::wstring& strName, const std::wstring& strValue) override; /**
* @brief 获取当前选择项
* @return 返回当前选择项索引
*/
int GetCurSel() const; /**
* @brief 根据控件索引选择一个子项
* @param[in] iIndex 要选择的子项索引
* @return 成功返回 true,否则返回 false
*/
bool SelectItem(int iIndex); /**
* @brief 根据控件指针选择一个子项
* @param[in] pControl 要选择的子项指针
* @return 成功返回 true,否则返回 false
*/
bool SelectItem(Control* pControl); /**
* @brief 根据控件名称选择一个子项
* @param[in] pControlName 要选择的控件名称
* @return 成功返回 true,否则返回 false
*/
bool SelectItem(const std::wstring& pControlName); /**
* @brief 设置是否显示动画效果
* @param[in] bFadeSwitch 设置为 true 则显示,false 为不显示动画
* @return 无
*/
void SetFadeSwitch(bool bFadeSwitch); /**
* @brief 判断是否需要显示动画效果
* @return 返回 true 显示动画,false 为不显示动画效果
*/
bool IsFadeSwitch() { return m_bFadeSwith; }

一个样式

TabBox它个布局控件,不过只能同时只能选择一个; 它默认没有类似MFC的tab按钮可以点击,不过,我用了 Option按钮代替。 每个tab页下有两个按钮。

tab1

tab2

tab3

xml中定义

xml中定义如下

tab page 按钮,

option按钮

<HBox height="30">
<Option class="checkbox_push" text="tab1" name="page_1" group="selct_tab" selected="true"/>
<Option class="checkbox_push" text="tab2" name="page_2" group="selct_tab" />
<Option class="checkbox_push" text="tab3" name="page_3" group="selct_tab" />
</HBox>

TabBox控件

TabBox控件定义如下,我用了水平布局分别定义了每个tab窗口下显示的内容

 <TabBox width="stretch" height="stretch" name="tab_show" selectedid="0" >
<HBox bkcolor="dark_gray">
<Option class="checkbox_push" text="1" group="selct_tab2" />
<Option class="checkbox_push" text="2" group="selct_tab2" />
</HBox>
<HBox bkcolor="light_green">
<Option class="checkbox_push" text="3" group="selct_tab1" />
<Option class="checkbox_push" text="4" group="selct_tab1" />
</HBox>
<HBox bkcolor="blue">
<Option class="checkbox_push" text="5" group="selct_tab3" />
<Option class="checkbox_push" text="6" group="selct_tab3" />
</HBox>
</TabBox>

代码关联

option关联

定义如下

ui::Option*	tab_page_arr_[3] = { nullptr };

与界面控件关联

// 1.用option代替tab页
std::wstring page_btn_name_arr[] = {L"page_1", L"page_2", L"page_3" };
auto find_func = [&](ui::Option* pdst, const std::wstring name)
{
// 先找到控件
ui::Control* ppage_tmp = FindControl(name);
if (ppage_tmp)
{
// 找到控件再绑定点击处理函数
pdst = dynamic_cast<ui::Option*> (ppage_tmp);
if (pdst)
pdst->AttachSelect(nbase::Bind(&BasicForm::OnTabPageClicked, this, std::placeholders::_1));
} }; find_func(tab_page_arr_[0], page_btn_name_arr[0]);
find_func(tab_page_arr_[1], page_btn_name_arr[1]);
find_func(tab_page_arr_[2], page_btn_name_arr[2]);

其中,OnTabPageClicked函数体如下:

bool BasicForm::OnTabPageClicked(ui::EventArgs* msg)
{
if (NULL == msg || nullptr == msg)
return false; static std::map<std::wstring, int> map_page_name = { {L"page_1", 0}, {L"page_2", 1}, {L"page_3", 2} }; // 1. 获取控件的名字
std::wstring name = msg->pSender->GetName(); // 2.寻找索引
std::map<std::wstring, int>::iterator it = map_page_name.find(name); // 找到了就设置当前选中的是哪一个tab
if (it != map_page_name.end())
if (tab_box_)
tab_box_->SelectItem(it->second); return false;
}

TabBox关联

// 2.关联tabbox控件
ui::Control* pcontrol_2 = FindControl(L"tab_show");
if (pcontrol_2)
tab_box_ = dynamic_cast<ui::TabBox*>(pcontrol_2);

num_duilib之TabBox用法(21)的更多相关文章

  1. Mybatis-Plus 实战完整学习笔记(九)------条件构造器核心用法大全(上)

    一.Mybatisplus通用(公共方法)CRUD,一共17种(3.0.3版),2.3系列也是这么多,这个新版本一定程度进行了改造和删减. 二.构造器UML图(3.0.3)-----实体包装器,主要用 ...

  2. JSP目录

    JSP目录   课时1    jsp概述和背后原理31:11 课时2    三种jsp的scriptlet语法27:29 课时3    jsp的注释14:00 课时4    JSP4个域对象的作用域3 ...

  3. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  4. mysql语法总结及例子

    1. DDL相关 a. -- 查询所有数据库 show databases;-- 删除数据库drop database ladeng; b. -- use `数据库名称`; 表示使用此数据库 use ...

  5. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

  6. Java 复习整理day05

    1 package com.it.demo01_oop; 2 3 import java.util.Arrays; 4 5 /* 6 案例: 演示面向过程和面向对象代码的区别 7 8 面向过程编程思想 ...

  7. 21.xpath定位中id 、starts-with、contains、text()和last() 的用法

    xpath语法:id .starts-with.contains.text()和last() 的用法 <input id="su" class="bg s_btn ...

  8. 21.Python算术运算符及用法详解

    算术运算符是处理四则运算的符号,在数字的处理中应用得最多.Python 支持所有的基本算术运算符,如表 1 所示. 表 1 Python常用算术运算符 运算符 说明 实例 结果 + 加 12.45 + ...

  9. [mybatis]Example的用法 标签: mybatis 2017-05-21 21:46 651人阅读 评论(11)

    Example类是什么? Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式. Example类可以用来生 ...

随机推荐

  1. P3571 [POI2014]SUP-Supercomputer

    *X. P3571 [POI2014]SUP-Supercomputer 题意简述:一棵以 \(1\) 为根的树.\(q\) 次询问,每次给出 \(k\),求至少要多少次同时访问不超过 \(k\) 次 ...

  2. eggNOG 5.0数据库介绍

    目录 1. eggNOG简介 2. eggNOG-Mapper注释原理 3. eggNOG 5.0数据资源 4. eggNOG-Mapper使用 5. NOG.KOG.COG.KEGG.GO区别? 1 ...

  3. rsync实现windows和windows之间的数据同步

    一:环境 1.同步对象:测试数据 2.服务端:Windows Server 2008 R2 3.客户端:Windows7 旗舰版64位 4.服务端rsync版本:cwRsyncServer_4.1.0 ...

  4. CentOS6忘记root密码如何重置

    CentOS6忘记root密码,如何重置密码 ①     重启服务器,按"e"键进入修改系统开机项界面 ②    选择内核项,按"e"进入其中进行配置 在文件内 ...

  5. 从零开始学习oracle

    引用博客:https://blog.csdn.net/qq_36998053/article/details/82725765 )Oracle之<环境配置> (二)Oracle之<基 ...

  6. 使用Rainbond实现离线环境软件交付

    一.离线交付的痛点 在传统行业,如政府.能源.军工.公安.工业.交通等行业,为了防止数据泄露和运行安全考虑,一般情况下网络会采取内外网隔离的策略,以防范不必要的风险,毕竟在安全防护方面,网络物理隔离是 ...

  7. 开发安卓记账本-HelloAndroid的完成

    这个寒假要完成一个家庭记账本软件的开发,今天完成了Android Studio的安装与第一个安卓应用的运行(HelloAndroid) 下图是效果: 1.Android Studio的安装 可直接百度 ...

  8. 学习Java 2021/10/7

    java重写Override 重载Overload 重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变.即外壳不变,核心重写 重写规则: 参数列表与被重写方法的参数列表必须 ...

  9. 学习java 7.14

    学习内容: 标准输入输出流 输出语言的本质:是一个标准的输出流 字节打印流 字符打印流 对象序列化流 明天内容: 进程和线程 遇到问题: 用对象序列化流序列化一个对象后,假如我们修改了对象所属的类文件 ...

  10. 并发 并行 进程 线程 协程 异步I/O python async

    一些草率不精确的观点: 并发: 一起发生,occurence: sth that happens. 并行: 同时处理. parallel lines: 平行线.thread.join()之前是啥?落霞 ...