2010-10-13 3 views
0

Как рисовать усеченный текст с ATSUI ?? У меня есть устаревшее приложение, которое использует QuickDraw API. он использует функции StringWidth, TruncString и DrawString. Я мог бы заменить StringWidth и DrawString на ATSUMeasureTextImage и ATSUDrawText ATSUI. Однако я не мог найти способ обрезать строку так, чтобы она вписывалась в прямоугольник.Как нарисовать усеченный текст с ATSUI

Я использовал кварц с QuickDraw перед тем, как выбрать ATSUI. 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 ... ?? если нет, как я нарисую строку, усеченную в rect.

Thanks, Abhinay.

ответ

1

Вы хотите использовать HIThemeGetTextDimensions для измерения строки с помощью политики усечения. Он даст вам ширину и высоту прямоугольника и базовую линию; вы можете сделать CGRect с такой шириной и высотой и установить его источник туда, куда вы хотите текст.

Удивительно, но эта функция по-прежнему поддерживается в 64-разрядной версии, хотя она никогда не была задокументирована (никогда не было никакой справочной документации для HITheme). Посмотрите его в заголовках для деталей.

+0

Спасибо, Питер, я нашел способ измерять выстроенные размеры текста с помощью функций ATSUI. На данный момент я не занимаюсь 64-разрядной версией. –

+0

Abhinay K Reddyreddy: Если ваше решение отличается от моего, почему бы не опубликовать его как ответ и не принять это? –