winapi - 如何使用 Direct2D 在 DirectWrite 中围绕图像或抽象形状环绕文本?
问题描述
我找不到未渲染到矩形区域的文本块的示例。
理想情况下,如果ID2D1HwndRenderTarget.DrawText()
让我提供多边形Geometry
而不是矩形会很好。
我尝试添加 Direct2D 层contentBounds
,认为它可能会跳过在这些层中呈现文本。它没有按预期工作,它只是阻止渲染到仍然在下面模拟文本的区域。
我还尝试将矩形区域应用于hwnd
窗口本身。它也阻止了渲染,但没有移动文本。
解决方案
IDWriteTextLayout
仅支持矩形布局,但 DirectWrite 支持您通过使用较低级别的功能(文本分析、字形测量、字形整形)可以想到的任何形状。从头开始编写自己的文本布局并非易事,但我编写了一个 Windows 7 SDK 示例,其中包含一个“FlowLayout”,它演示了一个圆形和一些其他简单的形状。它不需要任意几何形状,但您可以根据需要对其进行调整(请参阅 FlowLayoutSource::GetNextRect 以计算每条线的宽度)。
https://github.com/pauldotknopf/WindowsSDK7-Samples/tree/master/multimedia/DirectWrite/CustomLayout
推荐阅读
- python - 如何在 Python 中读取包含 ObjectId 和 ISODate 的 json 文件?
- javascript - 视频 (YouTube API) 完成后设置、获取和检查 Cookie - JavaScript
- javascript - 如何防止占位符覆盖 autocomplete="off"?
- unit-testing - 返回值是模拟期望时的单元测试
- android - 有没有办法将画中画限制为仅在应用程序中工作并且在后台时不持续存在?
- reactjs - 如何在 React Native 中通过 AsyncStorage 获取和对齐项目?
- excel - 任务窗格未显示 VSTO
- heroku - Heroku Dyno 内存与数据库内存
- reactjs - 在 react/redux 应用程序中,哪里是进行 api 调用以将更新状态持久保存到后端服务器的正确位置?
- firebase - 您可以在 Firebase 身份验证中删除一段时间内未验证的用户吗?