C++ 使用ImGui显示更长的字符串

C++ 使用ImGui显示更长的字符串,c++,string,opengl,imgui,C++,String,Opengl,Imgui,我使用的是ImGui,OpenGL的实现工作得很好,但是现在我在渲染一些文本时遇到了问题。出于某种原因,每当我尝试使用ImGui::Text(someString.c_str())呈现字符串时ImGui仅呈现前19个字符。如果我试图用ImGui::Text(“这是一个超过19个字符的文本”)呈现相同的文本,ImGui呈现整个文本 我也用ImGui::textformatted(&someString[0],&someString[someString.size()-1])尝试了它,结果相同:显示

我使用的是ImGui,OpenGL的实现工作得很好,但是现在我在渲染一些文本时遇到了问题。出于某种原因,每当我尝试使用
ImGui::Text(someString.c_str())呈现字符串时ImGui仅呈现前19个字符。如果我试图用
ImGui::Text(“这是一个超过19个字符的文本”)呈现相同的文本,
ImGui呈现整个文本

我也用
ImGui::textformatted(&someString[0],&someString[someString.size()-1])尝试了它,结果相同:显示前19个字符,但其余字符被切掉


但是如果我做了
std::clog,问题是我从来没有想过使用另一个字符串。。。

someString
的内容包含一个以字符串结尾的'u'。但是为什么“ü”不适用于ImGui是另一个问题。

为了让ImGui呈现非标准字符,您需要指定字体应使用的字符范围,并指示ImGui在呈现该字体时使用utf-8编码

根据要显示的字符,需要根据其utf-8代码页添加相关代码。大致如下:

const ImWchar*  ImFontAtlas::GetGlyphRangesPolish()
{
    static const ImWchar ranges[] =
    {
        0x0020, 0x00FF, // Basic Latin + Latin Supplement
        0x00A0, 0x02D9, // Polish characters 
        0,
    };
    return &ranges[0];
}
然后,您需要将该范围添加到要在程序中使用的字体:

ImFont* font = io.Fonts->AddFontFromFileTTF("fonts/DroidSans.ttf", 17.0f, nullptr, io.Fonts->GetGlyphRangesPolish());
现在,您可以在ImGui中使用额外导入的文本字符

ImGui::TextWrapped("łąężü");
如果不使用此方法,将显示?????字符,而不是ImGui中需要的字符


someString的内容是什么?
?可能这就是问题所在:我用了一个“ü”来终止字符串。谢谢,这就是问题所在。