我想在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这样的系统字体我没有任何问题。
感谢您的帮助。
答案 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
现在,它的工作正常。