如何使用ATSUI绘制截断文本

时间:2010-10-13 14:57:11

标签: core-graphics macos-carbon quickdraw

如何使用ATSUI绘制截断的文本?我有一个使用QuickDraw API的遗留应用程序。它使用StringWidth,TruncString和DrawString函数。我可以用ATSUI的ATSUMeasureTextImage和ATSUDrawText替换StringWidth和DrawString。但是我找不到截断字符串的方法,以便它适合矩形。

在选择ATSUI之前,我使用Quartz和QuickDraw。 Quartz不提供任何函数来估计绘制文本的大小(以像素为单位)。

CGContextSelectFont(cgContext,
    "Geneva", 12.0, kCGEncodingMacRoman);
CGContextSetTextMatrix(cgContext,
    CGAffineTransformMake(1.0,0.0, 0.0,
    -1.0, 0.0, 0.0));
CGContextShowTextAtPoint(cgContext,
    inPoint.h, inPoint.v + 12.00, (const
    char*)&(inString[1]), inString[0]);

ATSUI中是否有任何函数像TruncString一样执行字符串截断... ??如果不是我如何绘制截断为矩形的字符串。

谢谢, 阿希奈。

1 个答案:

答案 0 :(得分:1)

您希望使用HIThemeGetTextDimensions来测量带有截断策略的字符串。它会给你矩形的宽度和高度以及基线;您可以制作具有该宽度和高度的CGRect,并将其原点设置为您想要文本的位置。

令人惊讶的是,这个功能似乎仍然支持64位,虽然它从未被记录(HITheme从来没有任何参考文档)。请在标题中查找详细信息。