我们要:
- 准确测量文本。
- 在存在应用于图形上下文的平移和缩放变换的情况下,将文本逐行渲染到屏幕图形上下文。
- 命中测试:允许使用鼠标或通过显示的插入符号精确选择文本。
- 如果需要,使用打印机尽可能准确地打印结果。注意:这是次要的。屏幕渲染和点击测试是主要的。
- 在 Windows XP 和更高版本的操作系统上运行。
在同样将图形和图像渲染到相同图形上下文的 WinForms 应用程序中。
我们遇到了四种技术。我们已经尝试使用前两个,并在几个月的过程中遇到了所描述的问题。
GDI+
据称与分辨率无关的文本。然而,根据这个问题- 以及其他来源 - 由于质量问题,应避免使用该技术。
MSDN声明调用 Graphics.MeasureString StringFormat.GenericTypographic
并TextRenderingHint.AntiAlias
产生准确的字符串测量。然而,根据我们和其他人的经验,情况并非如此——我们没有得到准确的字符串测量值。
- 优点:快
- 缺点:字符串测量不准确。
结果:由于字符串测量不准确而无法使用。
GDI 通过 TextRenderer
这是为了克服 GDI+ 的限制而引入的。然而,这引入了它自己的限制:
- 非常慢
- 不适用于图形变换
结果:由于这些原因无法使用
GDI 通过 p/invoke
调用GetTextExtentExPoint
文本测量和//DrawText
进行渲染。DrawTextEx
ExtTextOut
我们还没有尝试过。
直写
这看起来很有希望,因为它与包括 GDI/GDI+ 在内的其他技术互操作,所以我们的图形渲染的其余部分可能不会改变。但是,它仅适用于 Windows Vista 和更新的 Windows 版本。这是目前的一个问题,因为 Windows XP 仍然有大量的安装基础。
问题
考虑到要求,哪些技术可以工作?
注意: 关于这个话题有很多错误信息,所以只有在你有这方面的专业知识的情况下才能回答这个问题。另外,请不要建议 WPF - 这不是我们正在考虑使用的东西。