Я использую Direct2D для некоторой графики, я получил его для рисования текста с помощью DirectDraw (используя функцию DrawText на ID2D1RenderTarget), но по какой-то причине он не будет рисоваться с нужным шрифтом. Когда я создаю текстовый формат для шрифта, который я хочу, я не получаю никаких ошибок. Я компилирую с набором опций 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);
Я не могу сказать, почему Tahoma выдаст Arial, учитывая фрагмент кода, который я вижу, но Terminal — это старый растровый шрифт, поддерживаемый только GDI. Этот формат файла шрифта не поддерживается GDI + / DWrite / WPF / XAML, только OpenType с таблицей глифов TrueType, OpenType с таблицей CFF или коллекциями TrueType (начиная с Windows 7..10). Попробуйте вместо этого «Segoe UI».