2010-10-13 24 views
0

Comment dessiner un texte tronqué avec ATSUI ?? J'ai une application héritée qui utilise l'API QuickDraw. il utilise les fonctions StringWidth, TruncString et DrawString. Je pourrais remplacer le StringWidth et DrawString avec ATSUMeasureTextImage et ATSUDrawText d'ATSUI. Cependant, je ne pouvais pas trouver un moyen de tronquer une chaîne de sorte qu'elle s'insère dans un rect.Comment dessiner un texte tronqué avec ATSUI

J'ai utilisé Quartz avec QuickDraw avant de choisir ATSUI. Quartz ne fournit aucune fonction pour estimer la taille (en pixels) du texte dessiné.

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

Y at-il une fonction dans ATSUI qui effectue une troncature de chaîne comme TruncString ... ?? sinon, comment puis-je dessiner une chaîne tronquée à un rect.

Merci, Abhinay.

Répondre

1

Vous souhaitez utiliser HIThemeGetTextDimensions pour mesurer la chaîne avec une règle de troncature. Il vous donnera la largeur et la hauteur du rectangle et la ligne de base; vous pouvez créer un CGRect avec cette largeur et hauteur et définir son origine à l'endroit où vous voulez le texte. Étonnamment, cette fonction semble encore être prise en charge en 64 bits, même si elle n'a jamais été documentée (il n'y a jamais eu de documentation de référence pour HITheme). Regardez-le dans les en-têtes pour plus de détails.

+0

Merci Peter, j'ai trouvé un moyen de mesurer les dimensions du texte mis en page avec les fonctions ATSUI. Je ne suis pas concerné par 64 bits pour l'instant. –

+0

Abhinay K Reddyreddy: Si votre solution diffère de la mienne, pourquoi ne pas l'afficher comme réponse et l'accepter? –