在directx-11中使用指定的字体

时间:2015-06-29 10:05:05

标签: c++ windows fonts directx-11

我想在DirectX 11中使用指定的字体文件

搜索后,我很难创建自定义字体集。

加载指定字体文件的代码:

Platform::String^ pathTEST;
Microsoft::WRL::ComPtr<IDWriteFontFile> fontFileTEST;
Microsoft::WRL::ComPtr<IDWriteFontFileLoader> fontFileLoaderTEST;

Windows::Storage::StorageFolder^ folder = Windows::Storage::ApplicationData::Current->LocalFolder;
pathTEST = folder->Path + L"\\Bubblegum.ttf";//#BubbleGum
HRESULT hr = S_OK;

if (SUCCEEDED(hr))
    hr = dwriteFactory->CreateFontFileReference(pathTEST->Data(), NULL, &fontFileTEST);

if (SUCCEEDED(hr))
    hr = fontFileTEST->GetLoader(&fontFileLoaderTEST);

if (SUCCEEDED(hr))
    hr = dwriteFactory->RegisterFontFileLoader(fontFileLoaderTEST.Get());

应使用该字体的代码,但我缺少Font集合:

MyIDWriteFactory2->CreateTextFormat(
    L"BubbleGum", MyWriteFontCollection (nullptr for the moment),
    DWRITE_FONT_WEIGHT_LIGHT, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL,
    16.0f, L"en-us", &MyIDWriteTextFormat);

使用像Arial这样的系统字体我没有任何问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

再次阅读Trying to use a custom font file using DirectX - What is the collection key?Custom Font Collections后,我开始了解如何获得自定义集合。

由于以下原因,我修改了Microsoft提供的示例代码:

  • 在Windows应用商店应用中,它不允许使用GetModuleHandle。我在ResourceFontFileEnumerator中直接使用CreateFontFileReference而不是CreateCustomFontFileReference。

  • 它在应用程序中使用字体,但在我的情况下,字体在用户给出的另一个文件中。所以我使用了一个解决方法,通过ResourceFontContext :: CreateFontCollection

  • 为ResourceFontFileEnumerator提供字体路径列表

现在,它的工作正常。