【Dear Imgui】组件的使用之Text

1、Text的使用

int idHello = 0;
ImGui::Text("idHello = %d", idHello);

Tip::Text使用的参数和C语言的printf里面的参数格式一致,里面写什么,显示的就是什么

2、Text显示有颜色的字体:

ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "idHello = %d", idHello);

3、使Text支持中文字符输入输出

当我们不设置自己的字符集的时候,默认是不能显示汉字的,如果不设置自己的字符集,直接显示汉字,那么就只会显示:“?”

此时相当于我们使用了接口:

io.Fonts->AddFontDefault();

所以当我们使用汉字显示的时候,就需要设置自己的字符集:从网上下载包含汉字的.ttf文件,然后通过接口进行设置

ImGuiIO& io = ImGui::GetIO(); (void)io;
ImFont* font = io.Fonts->AddFontFromFileTTF("AaDouBanErTi-2.ttf", 15.0f, NULL, io.Fonts->GetGlyphRangesChineseFull());

这里面最后一个参数是设置加载的多少,当前用的是加载所有汉字,还有就会可以加载常用的汉字,但是可能会比较少,两个接口如下:

io.Fonts->GetGlyphRangesChineseSimplifiedCommon(); // 这个是只加载常用汉字,是参考的维基百科上的2500个汉字,但是现在的常用汉字是3500个,所以少了1000个
io.Fonts->GetGlyphRangesChineseFull(); // 这个是加载字体中所有的汉字

注意:传进来的字符必须是unicode格式,可以直接在字符串前面加u8就可以了

ImGui::Text(u8"你好");

以上接口出自:https://www.joven.top/archives/192

其实github上提供的例子里面也提供了很多加载的文件以及默认的方式吗,就在main.cpp里面:

//io.Fonts->AddFontDefault();
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f);
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f);
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f);
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f);

4、显示灰色字体

效果图
ImGui::TextDisabled(u8"应用简介");

5、当鼠标悬停的时候,显示二级内容

char* desc = u8"这是一个工具类软件";
ImGui::TextDisabled(u8"应用简介");
if (ImGui::IsItemHovered())
{
    // 显示工具的提示
	ImGui::BeginTooltip();
    // 使得文字的区域可以自己控制,  但是这里我感觉更推荐使用:TextWrapped接口,之后的部分有提到他们的区别
	ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
	ImGui::TextUnformatted(desc);
	ImGui::PopTextWrapPos();
    // 结束工具提示
	ImGui::EndTooltip();
}

6、如何加载多种字体

比如:显示字符串1的时候,使用字体1,显示字符串2的时候,使用字体2

但是需要注意:

①imgui不能动态的加载字体,所以需要提前加载完成,然后使用PushFont和PopFont的接口进行转换

②当我们加载了多种字体,但是没有使用PushFont和PopFont进行设置的时候,使用的是我们第一个加载的字体

ImFont* font1 = io.Fonts->AddFontFromFileTTF("AaDouBanErTi-2.ttf", 20.0f, NULL, io.Fonts->GetGlyphRangesChineseFull());
ImFont* font2 = io.Fonts->AddFontFromFileTTF("ZhanKuWenYiTi-2.ttf", 20.0f, NULL, io.Fonts->GetGlyphRangesChineseFull());
ImFont* font3 = io.Fonts->AddFontFromFileTTF("WuXia.ttf", 20.0f, NULL, io.Fonts->GetGlyphRangesChineseFull());
ImFont* defaultFont = io.Fonts->AddFontDefault();
......
// 使用不同的字体
ImGui::Text(u8"第一种字体");
ImGui::PushFont(font3);
ImGui::Text(u8"使用Font3武侠风格字体");
ImGui::PopFont();

7、每一行的字数随着窗口大小的改变而改变

ImGui::TextWrapped(u8"当前的字体会随着窗口大小的变换,而进行每一行字数的调整");

8、每一行的字数,可以根据自己的情况进行改变,但是不随窗口的大小改变

这里我们使用了一个滑块组件来控制文字区域的大小,可以使得文字的区域随着滑块的数组进行变化,但是不随着窗口的变化进行变化

static float zoom = 50.0f;
ImGui::SliderFloat(u8"滑动以改变文字区域大小", &zoom, -20, 200, "%.3f");
ImVec2 pos = ImGui::GetCursorScreenPos();
ImGui::PushTextWrapPos(pos.x + zoom);
ImGui::Text("this is a second, it is was used for check the rightable of PushTextWrapPos");
ImGui::PopTextWrapPos();

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值