2010-01-06 3 views
1

J'essaie d'afficher du texte sur un contrôle Windows, tourné de 90 degrés, de sorte qu'il se lit de «bas en haut» pour ainsi dire; Fondamentalement, c'est l'étiquette sur l'axe Y d'un graphique.SetWorldTransform() et la rotation des polices

j'ai obtenu mon texte à afficher verticalement en changeant mon système de coordonnées pour le DC en utilisant SetGraphicsMode (GM_ADVANCED), puis en utilisant

XFORM transform; 
const double angle = 90 * (boost::math::constants::pi<double>()/180); 
transform.eM11 = (FLOAT)cos(angle); 
transform.eM12 = (FLOAT)(-sin(angle)); 
transform.eM21 = (FLOAT)sin(angle); 
transform.eM22 = (FLOAT)cos(angle); 
transform.eDx = 0.0; 
transform.eDy = 0.0; 
dc.SetWorldTransform(&transform); 

Maintenant, quand je lance mon programme, le texte pivotée est différent de la même du texte quand il est affiché 'normalement' (horizontalement). J'ai essayé avec une police à largeur fixe (système) et la police WinXP par défaut. La police du système affiche un aspect anti-aliasé et l'autre ressemble presque à une police de 1 pixel plus petite que la version horizontale, bien qu'ils soient dessinés en utilisant le même DC et sans changement de police entre les deux. Il semble que Windows détecte que je dessine une police pas le long de l'axe normal (0 degrés) et qu'il essaie d'optimiser par anti-aliasing.

Maintenant, je ne veux pas de tout ça. Je veux juste le même texte que je dessine horizontalement pour être dessiné exactement de la même façon, à l'exception de 90 degrés de rotation, ce qui est possible puisque c'est une rotation d'exactement 90 degrés. Est-ce que quelqu'un sait ce qui se passe et si je peux changer cela facilement pour travailler comme je veux? Je détesterais avoir traversé tous ces problèmes et avoir découvert que je devrais avoir recours à un rendu sur une image bitmap hors écran, en le faisant tourner en utilisant une simple rotation pixel par pixel et en ayant pour cela le bitblt dans mon contrôle :(

Répondre

1

Avez-vous essayé de placer les lorsque vous créez la police au lieu des paramètres nEscapement et nOrientation d'utiliser SetWorldTransform? Voir CreateFont pour plus de détails.