我正在使用FW1FontWrapper
库来包装我的 DirectX 11 C++ 应用程序中使用的字体。
我想更改用 . 渲染的文本中的行距(两行文本之间的距离)FW1FontWrapper
。
我知道在 DirectX 中我可以使用它IDWriteTextFormat::SetLineSpacing(DWRITE_LINE_SPACING_METHOD_UNIFORM, 30.0f, 20.0f)
。
不幸的是,我不知道如何访问正确的IDWriteTextFormat
结构。
我试图:
HRESULT hResult = FW1CreateFactory(FW1_VERSION, &FW1Factory);
hResult = FW1Factory->CreateFontWrapper(device, L"Arial", &fontWrapper);
//my attemp - first get the IDWriteFactory
IDWriteFactory *pDWriteFactory;
hResult = fontWrapper->GetDWriteFactory(&pDWriteFactory);
//and now the IDWriteTextFormat
IDWriteTextFormat *pTextFormat;
hResult = pDWriteFactory->CreateTextFormat(L"Arial", NULL,
DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL, 10.0f, L"", &pTextFormat);
pTextFormat->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_UNIFORM, 100.f, 20.0f);
我想它不起作用,因为这样我创建和修改了new IDWriteTextFormat
,而不是通过以下方式影响渲染的那个:
fontWrapper->DrawString(
context,
s2ws(content).c_str(),// String
fontSize,// Font size
startTextPosition.getX(),// X position
startTextPosition.getY(),// Y position
color,// Text color, 0xAaBbGgRr
FW1_RESTORESTATE// Flags (for example FW1_RESTORESTATE to keep
//context states unchanged)
);
那么,如何访问权限IDWriteTextFormat
(我要修改的那个会影响渲染;不是新的那个)?
据我所知FW1FontWrapper
,没有自己的方法来设置行距。