如何使用 ATSUI 绘制截断文本

发布于 2024-09-27 10:55:17 字数 688 浏览 7 评论 0原文

如何使用 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... 那样进行字符串截断?如果不是,我如何绘制一个截断为矩形的字符串。

谢谢, 阿比奈。

How do i draw truncated text with ATSUI?? I have a legacy app which uses QuickDraw API. it uses StringWidth , TruncString and DrawString functions. I could replace the StringWidth and DrawString with ATSUI's ATSUMeasureTextImage and ATSUDrawText. However i could not find a way to truncate a string so that it fits into a rect.

I used Quartz with QuickDraw before choosing ATSUI. Quartz does not provide any functions to estimate the size (in pixels) of the drawn text.

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]);

Is there any function in ATSUI that does string truncation like TruncString...?? if not how do i draw a string truncated to a rect.

Thanks,
Abhinay.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花桑 2024-10-04 10:55:17

您想要使用 HIThemeGetTextDimensions 通过截断策略来测量字符串。它会给你矩形的宽度和高度以及基线;您可以创建一个具有该宽度和高度的 CGRect 并将其原点设置为您想要文本的任何位置。

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

You want to use HIThemeGetTextDimensions to measure the string with a truncation policy. It will give you the rectangle width and height and the baseline; you can make a CGRect with that width and height and set its origin to wherever you want the text.

Amazingly, this function appears to still be supported in 64-bit, although it has never been documented (there has never been any reference documentation at all for HITheme). Look it up in the headers for details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文