【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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章