Direct2D / DirectDraw只会使用Arial字体绘制文本

时间:2015-07-25 16:58:21

标签: c++ directx direct2d directwrite

我正在使用Direct2D获取某些图形,我已经使用DirectDraw绘制文本(使用ID2D1RenderTarget上的DrawText函数)但由于某种原因它不会使用我想要的字体绘制。当我为我希望的字体创建文本格式时,我没有收到任何错误。我正在使用Multibyte选项集进行编译。

字体加载代码:

std::wstring unicode(name, name + strlen(name));
        HRESULT r = g_writeFactory->CreateTextFormat(unicode.c_str(), NULL, DWRITE_FONT_WEIGHT_NORMAL,
            DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, (float)size, L"en-us", &g_fonts[i]);
        g_fonts[i]->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_LEADING);
        g_fonts[i]->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_NEAR);

        if (FAILED(r))
        {
            dgSetLastError(dgERROR_CREATIONFAILED);
            return -1;
        }

        return i;

文字绘图:

std::wstring unicode(text, text + strlen(text));
D2D1_RECT_F r = D2D1::RectF(x, y, x + width, y + height);
int len = unicode.size();

if (g_isRenderToTexture)
    g_textureTarget->DrawText(unicode.c_str(), len, g_fonts[fontId], &r, g_solidBrush);
else
    g_bufferTarget->DrawText(unicode.c_str(), len, g_fonts[fontId], &r, g_solidBrush);

1 个答案:

答案 0 :(得分:0)

我不能说为什么Tahoma会产生Arial,考虑到我能看到的代码片段,但终端只是GDI支持的旧位图字体。 GDI + / DWrite / WPF / XAML不支持该字体文件格式,仅支持带有TrueType glyf表的OpenType,带有CFF表的OpenType或TrueType集合(从Windows 7..10开始)。试试" Segoe UI"代替。