SetLineSpacing() 在 DirectWrite 中不起作用 - 为什么?
-
13-09-2019 - |
题
我正在 Direct2D/DirectWrite 中渲染文本,但调用 SetLineSpacing()
在 TextFormat 或 TextLayout 上似乎没有效果。有谁知道为什么?
解决方案
我99%肯定这是一个错误。我做了一些玩弄的Direct2D和最近也有一个问题,SetLineSpacing()
上TextLayout,而认为这是一样的你是描述,在这种情况下,我可以证实,它不只是你。重新打开在MS连接你的bug报告,它已被关闭。
其他提示
我甚至有相同的问题,因为梅德Nesteruk说。
不过,我发现,如果你设置后lineSpacing” CreateTextLayout”,SetLineSpacing不能工作。
否则,如果您CreateTextLayout之前设置LineSpacing, 现在可以工作。
也许你可以试试这个soluton。
PS:我的ENV。是在窗口Vista SP2的。
非常感谢。
不幸的是你没有提供的代码显示你想要做什么。我假设你想设置的行间距是这样的:
pTextLayout->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, lineSpacing, baseline);
上MSDN文档不是关于不同行距的方法非常清楚。默认方法导致从所使用的字体和嵌入对象衍生的每条线的间距,如果有的话,所以每一行的是,它需要根据其内容要的高度。在这种情况下,这两个参数,lineSpacing
和baseline
,将被忽略。
如果你有一个使用单个字体(字体和大小)和(即没有比文本更高或内联的对象)没有嵌入对象的文本格式,可以指定统一的行间距。这是DWRITE_LINE_SPACING_METHOD_UNIFORM
是什么。我刚尝试过了,调用SetLineSpacing()
与间隔根据传递的参数统一的行此方法的结果。
与Windows 10开始,还有第三行间距的方法,DWRITE_LINE_SPACING_METHOD_PROPORTIONAL
,可被用来实现行间距,是相对于什么字体大小和嵌入对象指定。然而,这仅支持Windows 10。
最误导性的一部分,在我的经验,就是调用SetLineSpacing(DWRITE_LINE_SPACING_METHOD_DEFAULT, x, y)
成功,没有出现错误,事后检索行间距参数,使用GetLineSpacing()
方法,返回已提供的价值(而他们仍然没有实现任何东西) 。该API在这方面是内部一致,不丢弃指定的值,即使他们没有获得任何有用的东西。此外,当你调用GetLineSpacing()
上的新建IDWriteTextFormat
或IDWriteTextLayout
例如,值返回为零(这是正确的,因为行间距的方法是DWRITE_LINE_SPACING_METHOD_DEFAULT
)。为了能够做什么有用的东西,你必须确定你使用的字体默认的行距。你可以通过你所使用的字体调用IDWriteFont::GetMetrics()
实现这一目标。默认行间距是ascent
,descent
和lineGap
值的总和。
查尔斯·彼佐尔德有关分页的制品随着DirectWrite的在写下关于此。
你检查由HRESULT
返回SetLineSpacing()
错误代码?
提示:如果您使用的Visual Studio刚刚在调试监视窗口中的一种类型eax,hr
看到任何可能的错误代码调用后右
最小支持的客户端:视窗7,Windows Vista带有SP2和平台Windows Vista更新
你运行任何Windows的上述版本的? 我相信,你为什么没有看到任何改变的原因是因为下面的人任何版本上面提到的那样不支持SetLineSpacing()中的DirectWrite。