Corso di Visual C++

Operazioni con i font

 

Nel precedente articolo abbiamo esaminato in dettaglio come creare un oggetto CFont, in questo vedremo quali operazioni è possibile effettuare utilizzando questa classe con CDC.

La prima operazione che ci potrebbe interessare è la visualizzazione del testo, a tal uopo si utilizza la funzione di CDC TextOut; il suo prototipo è il seguente:

BOOL TextOut( int x, int y, const CString& str );

x e y specificano le coordinate logiche del punto di origine della stringa da visualizzare, tale stringa viene passata per riferimento nell'ultimo parametro.

Questa funzione non aggiorna le coordinate correnti, ne le usa a meno che non venga prima chiamata la funzione SetTextAlign con parametro TA_UPDATECP. In quest'ultimo caso vengono ignorate le coordinate x e y e viene utilizzata come origine la posizione corrente.

Il valore di ritorno è diverso da 0 in caso di successo dell'operazione.

 

Altra funzione di cui abbiamo appena accennato è SetTextAlign, il suo prototipo è il seguente:

UINT SetTextAlign( UINT nFlags );

Il valore ritornato è quello dell'impostazione precedente, nFlags indica il tipo di allineamento può assumere una combinazione dei seguenti valori ( per ogni categoria non sceglierne più di uno ):

Prima categoria: ( allineamento orizzontale )

- TA_LEFT: allinea il testo a sinistra ( default ).
- TA_CENTER : allinea il testo al centro, in questo caso la coordinata x passata a TextOut ( oppure ExtTextOut ) è il punto centrale in base al quale si effettua l'allineamento.
- TA_RIGHT : allinea il testo a destra, in questo caso la coordinata x passata a TextOut è il punto estremo a destra usato come margine per l'allineamento.

Seconda categoria: ( allineamento verticale )

- TA_TOP : allinea il testo usando la coordinata y passata a TextOut come margine superiore del carattere ( default ). Il testo sta sotto la posizione y.

- TA_BOTTOM : allinea il testo usando la coordinata y passata a TextOut come margine inferiore del carattere. Il testo sta sopra la posizione y.

- TA_BASELINE : come TA_BOTTOM, ma viene utilizzata come linea del carattere quella che passa per la linea di base ( escludendo eventuali caratteri discendenti )

Terza categoria: ( aggiornamento della posizione corrente )

- TA_NOUPDATECP : non aggiorna la posizione corrente di disegno in seguito ad ogni chiamata di TextOut o ExtTextOut ( default )
- TA_UPDATECP : viene aggiornata la posizione di disegno corrente con le coordinate dell'angolo inferiore destro del rettangolo di contorno del testo.

Molto comoda risulta anche la funzione TabbedTextOut che visualizza il testo usando le tabulazioni; il suo prototipo è il seguente:

CSize TabbedTextOut( int x, int y, const CString& str, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );

Il valore di ritorno è la dimensione della stringa ( in coordinate logiche ), questo valore è anche quello calcolato dalla funzione GetTextExtent.

x e y specificano l'origine della stringa specificata con str.

nTabPositions specifica il numero di valori contenuti nell'array di interi lpnTabStopPositions il quale contiene in ordine crescente le posizioni ( in coordinate logiche ) dei margini di tabulazione.

NTabOrigin specifica la posizione x dalla quale ha inizio la misura delle tabulazioni.

Guardate il seguente esempio :

CString riga1="Modello\tCilindrata\tVelocità";

CString riga2="Audi80\t2000\t220";

CString riga3="GolfGT\t1600\t185";

CString riga4="CorsaGSI\t1600\t195";

int tabs[ ] = { 150,300 };

pDC->TabbedTextOut ( 50,50,riga1,2,tabs,50 );

pDC->TabbedTextOut ( 50,100,riga2,2,tabs,50 );

pDC->TabbedTextOut ( 50,125,riga3,2,tabs,50 );

pDC->TabbedTextOut ( 50,150,riga4,2,tabs,50 );

 

Torna all'indice Generale del corso di Corso di Visual C++ di Software Planet