Come ottenere le dimensioni del testo vero e proprio, quando ClearType è acceso?
Domanda
Ho un'applicazione di Win32 GUI che utilizza GDI havily. Ha bisogno di disegnare il testo su una bitmap a coordinate specificate e poi cancellarlo e sostituirlo con il bitmap originale.
I procedere nel seguente modo:
- Seleziona carattere (GetStockObject (DEFAULT_GUI_FONT)), pennello, altre cose nel contesto di periferica
- chiamare GetTextExtentPoint32 () per calcolare la dimensione del testo
- la società, il cui punto di partenza del testo che posso calcolare il rettangolo di testo previsto e conservarla
- chiamare TextOut () per lo stesso contesto dispositivo con lo stesso punto di partenza e lo stesso testo
e poi ripristinare il bitmap per il negozio di rettangolo.
Funziona bene quando ClearType antialiasing è spento. Ma con ClearType dalla dimensione restituita da GetTextExtentPoint32 () è leggermente inferiore alla dimensione effettivamente occupata dal testo quando TextOut () viene chiamato. Così, quando ho seguito ripristinare il bitmap originale alcune piccole strisce del testo rimanere al suo posto e non ho artefatti.
C'è una cura per questo senza disabilitare ClearType?
Soluzione
Si potrebbe anche provare DrawText con DT_CALCRECT per calcolare la dimensione della stringa. Forse funziona meglio.
Inoltre è possibile quindi scrivere la stringa con DrawText all'interno di un rettangolo con le dimensioni pari a quella che si ottiene con DT_CALCRECT e sarà agganciare il testo in caso si tratta di un po 'più grande.