我使用Direct2D的一些图形,我已经得到它用DirectDraw绘制文本(使用ID2D1RenderTarget上的DrawText函数),但由于某种原因,它不会用我想要的字体绘制。当我为我想要的字体创建文本格式时,我没有得到任何错误。我正在编译多字节选项集。
字体加载代码:
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);
我不能说为什么Tahoma会产生Arial,给出了我可以看到的代码片段,但是Terminal是一个只有GDI支持的旧位图字体。该字体文件格式不支持GDI+/DWrite/WPF/XAML,只有OpenType与TrueType glyf表,OpenType与CFF表,或TrueType集合(作为Windows 7..10)。试试"Segoe UI"