nim_duilib(13)之添加fmt库
introduction
习惯使用fmt库做字符串的格式化操作。尽管nim_duilib提供了类似的函数。
故项目demo_xml引入了外部库fmt
framework.h中添加下面的以便使用fmt库
#include "fmt/format.h"
Note
stage1
相对之前的代码,这次重新调整了库的目录结构。现如下:
.
├─Debug # VS默认输出
├─demo_xml # 主目录
└─ext # 存放扩展库
├─third_party # 存放第三库
│ ├─duilib ## duilib库
│ ├─fmt ## fmt库,字符串格式化库,
│ └─jsoncpp ## json库
└─tool_kits # 待定
stage 2
同时,demo_xml移除了对先前头文件搜索路径的设定,改为当前目录结构下设置指定头文件目录。
stage 3
fmt库,已经设定好了,我用cmake+VS2017生成了对应的工程文件,这样就可以在demo_xml项目中引用fmt库了。
当然,你也可以编译动态库或者静态库,再由demo_xml项目调用静态库或者静态库。
stage 4
xml文件中新增了一个控件richedit用于显示窗口上的其他控件的名字,比如,按钮单击,richedit显示按钮的在xml配置的name或者代码中设置的name;ListBox的item双击,richedit显示item设置的name。 具体的,参考代码。 效果图如下:

stage 5
ListBox和Tree控件的item都设置了监听,例如,ListBox的Item的监听双击代码如下:
ui::ListContainerElement* pelement = new(std::nothrow) ui::ListContainerElement;
if (pelement)
{
// 设置item显示的内容
std::wstring str_item = fmt::format(L"{}", i);
pelement->SetText(str_item);
pelement->SetName(str_item);
// 设置item的样式,可以在global.xml中找到
pelement->SetClass(L"listitem");
pelement->SetFixedHeight(20);
plist_->Add(pelement);
// 监听双击
pelement->AttachDoubleClick(nbase::Bind(&BasicForm::OnListBoxItemDbClicked, this, std::placeholders::_1));
}
其中,函数OnListBoxItemDbClicked的原型如下:
// 监听listbox的item的双击
bool OnListBoxItemDbClicked(ui::EventArgs* msg);
OnListBoxItemDbClicked函数体如下:
bool BasicForm::OnListBoxItemDbClicked(ui::EventArgs* msg)
{
if (msg && prichedit_show_)
{
std::wstring str = msg->pSender->GetName();
prichedit_show_->SetText(str);
}
return false;
}
stage 6
工程文件体积较大,因为cef相关的文件体积较大。
可以使用light_weiht.bat文件为项目瘦身。Note: 注意避免删除必要项目,可自行修改。 其代码如下:
del /s *.vc.db
del /s *.tlog
del /s *.log
del /s *.idb
del /s *.pdb
del /s *.lastbuildstate
del /s *.ilk
del /s *.exp
del /s *.obj
del /s *.iobj
del /s *.ipch
del /s *.tlh
del /s *.obj.enc
del /s *.tli
del /s *.exp
del /s *.pch
rd /s /q %cd%\.vs
del /s %cd%\Debug\*.lib
del /s %cd%\Release\*.lib
stage 7
截至目前,关于nim_duilib库的使用全部代码,可以在 这里 下载。
我使用的环境:win10 1909 + VS2017
nim_duilib(13)之添加fmt库的更多相关文章
- AndroidStudio权威教程 AS添加第三方库的6种方式(Jar module so等)
点击项目设置按钮 依次选择 App > Dependencies 1. 直接搜索法 依次选择 + > Library dependency 这里的搜索一定要是全名的,不然搜不到哦 下图所表 ...
- git——添加远程库
添加远程库 阅读: 406682 现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以 ...
- Git添加远程库
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 在VS中添加lib库的三种方法
注意: 1.每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Prop ...
- 向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)
在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面: ·Quartus不支持Testbench: ·调用了megafunction或者lpm库之类的Alte ...
- 在ASP.NET 5中如何方便的添加前端库
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:ASP.NET 5和之前的ASP.NET版本有很大的不同,其中之一就是对前端库的管理不再使用Nuget,而 ...
- Auty自动化测试框架第七篇——添加动作库和常量文件库
[本文出自天外归云的博客园] 添加动作库 因为有很多调用的action类如果一直保存在utils中会让utils库不可维护,所以规定utils库中只放和框架本身有关的工具类,和脚本内容相关的工具类都放 ...
- iOS——Xcode中添加第三方库
一.只有.h和.a文件的库 1.向项目中添加三方库文件 如果添加的第三方库只有.h和.a文件,直接把文件夹拖进项目下面,这时会弹出下面的提示框,一定要勾选下面选择的选项: 这里要注意,在Add to ...
- VS2010中添加lib库引用
VS2010中添加lib库引用: 1 菜单 项目---> 属性--->配置属性-->链接器---->输入---附加依赖项, 加入库名,如: my_API.lib; 或是在c ...
随机推荐
- 利用plink软件基于LD信息过滤SNP
最近有需求,对WGS测序获得SNP信息进行筛减,可问题是测序个体少,call rate,maf,hwe,等条件过滤后,snp数量还是千万级别,所以后面利用plink工具根据LD信息来滤除大量SNP标记 ...
- PyTools-包罗万象的python工具包
PyTools-包罗万象的python工具包 <---点击这里获取代码,欢迎star. 自己平时写的代码都以函数方式封装起来了,方便代码复用. _________ ________ ______ ...
- 强化学习实战 | 自定义Gym环境之井字棋
在文章 强化学习实战 | 自定义Gym环境 中 ,我们了解了一个简单的环境应该如何定义,并使用 print 简单地呈现了环境.在本文中,我们将学习自定义一个稍微复杂一点的环境--井字棋.回想一下井字棋 ...
- A Child's History of England.47
CHAPTER 13 ENGLAND UNDER RICHARD THE FIRST, CALLED THE LION-HEART In the year of our Lord one thousa ...
- HBase【操作Java api】
一.导入依赖 创建模块,导入以下依赖,maven默认编译版本是1.5,用1.8编译. pom.xml <dependencies> <dependency> <group ...
- 【leetcode】565. Array Nesting
You are given an integer array nums of length n where nums is a permutation of the numbers in the ra ...
- redis入门到精通系列(四):Jedis--使用java操作redis详解
(一)前言 如果不把数据库和后端语言联系起来,就起不到数据库应该要起到的作用.Java语言通过JDBC操作mysql,用Jedis操作redis.当然了,java操作redis的方式不止jedis一种 ...
- 【Linux】【Shell】【Basic】流程控制
1. 选择执行: 1.1. if 单分支的if语句: if 测试条件 then 代码分支 fi 双分支的if语句: if 测试条件; then 条件为真时执行的分支 else 条件为假时执行的分支 f ...
- 2.8 GO 参数传递
简单将GO中参数传递分为三类 数字.字符.字符串等类型 结构体 方法 GO的方法本身就是地址的入口,打印一个方法输出的是这个方法的地址 func test_func(){ //0x488a30 fmt ...
- 【Java基础】ExecutorService的使用
ExecutorService是java中的一个异步执行的框架,通过使用ExecutorService可以方便的创建多线程执行环境. 本文将会详细的讲解ExecutorService的具体使用. 创建 ...