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