imgui で UTF-8 なテキスト(漢字等)を表示する


https://github.com/ocornut/imgui で UFT-8なテキストを表示するための方法のメモです

環境

Windows 10 pro
DxLib 3.1.6f
visual studio professional 2015
Unicode 文字セットを使用する

初期化

フォントの設定を行います。


E_RESULT init_draw()
{
    g_pd3dDevice = (LPDIRECT3DDEVICE9)GetUseDirect3DDevice9();
    ImGui_ImplDX9_Init(mainWindowHandle, g_pd3dDevice);

        //フォントの設定を行う。IPAゴシック 14ポイント
    ImGuiIO& io = ImGui::GetIO();
    io.Fonts->AddFontFromFileTTF("resource\\ipag.ttf", 14.0f, nullptr, io.Fonts->GetGlyphRangesJapanese());

    return E_RESULT_SUCCESS;
}

表示の実際

サンプルプログラムを見ると文字コード直接埋め込みでした。

imgui_demo.cpp
        // 384行目付近を抜粋
        ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)");
        ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");



これでは面倒なので調べたところ、なんてことはありませんでした。
u8リテラル指定だけで表示できます。

E_RESULT    exec_draw_imgui()
{
    RenderVertex();
    getInputEvent();
    ImGui_ImplDX9_NewFrame();

        // 漢字を u8 リテラルで指定するところがポイントです
    {
        static float f = 0.0f;
        ImGui::Begin(u8"メインメニュー", &show_another_window);
        ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
        ImGui::ColorEdit3("clear color", (float*)&clear_col);
        ImGui::End();
    }

    // Rendering
    g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);
    g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
    g_pd3dDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, false);
    D3DCOLOR clear_col_dx = D3DCOLOR_RGBA((int)(clear_col.x*255.0f), (int)(clear_col.y*255.0f), (int)(clear_col.z*255.0f), (int)(clear_col.w*255.0f));

    ImGui::Render();
    g_pd3dDevice->Present(NULL, NULL, NULL, NULL);

    RefreshDxLibDirect3DSetting();

    return E_RESULT_SUCCESS;
}