Specifica della lunghezza della stringa di output di testo

Diverse funzioni di tipo carattere e output di testo hanno un parametro che specifica la lunghezza della stringa di output di testo. Un esempio tipico è il parametro cchText di DrawTextEx.

Ognuna di queste funzioni ha una versione "ANSI" e una versione Unicode (ad esempio, DrawTextExA e DrawTextExW rispettivamente). Per la versione "ANSI" di ogni funzione, la lunghezza viene specificata come conteggio BYTE e per la funzione Unicode specificata come conteggio di WORD.

È tradizionale pensare a questo come "conteggio dei caratteri". Questo è generalmente accurato per molte lingue, tra cui l'inglese, ma non è accurato in generale. Nelle stringhe "ANSI" i caratteri nelle pagine codici SBCS accettano un byte ogni byte, ma la maggior parte dei caratteri nelle pagine codici DBCS accetta due byte. Analogamente, la maggior parte dei caratteri Unicode attualmente definiti risiede nel piano multilingue di base (BMP) e le relative rappresentazioni UTF-16 si adattano a una PAROLA, ma i caratteri supplementari sono rappresentati in Unicode da ''surrogati'', che richiedono due WORD.

Ognuna di queste funzioni accetta un conteggio di lunghezza. Per la versione "ANSI" di ogni funzione, la lunghezza viene specificata come lunghezza del conteggio BYTE di una stringa non inclusa la terminazione NULL . Per la funzione Unicode, il conteggio della lunghezza è il conteggio di byte diviso per sizeof(WCHAR), che è 2, non incluso il terminatore NULL . Il conteggio dei caratteri è il conteggio del numero di caratteri, che potrebbe non essere uguale al numero di lunghezza della stringa. In alcuni casi, i caratteri accettano più byte per ANSI (ad esempio, carattere DBCS ) e più di una WORD per Unicode (ad esempio, caratteri surrogati). Inoltre, il numero di glifi potrebbe non essere uguale al numero di caratteri perché più caratteri potrebbero essere compositi per creare un glifo. Il conteggio della lunghezza è la quantità di dati. Il numero di caratteri è il numero di unità elaborate come un'entità. Glifi sono ciò che viene eseguito il rendering. Ad esempio, in Unicode è possibile avere una stringa con lunghezza di 3, ovvero 2 caratteri e che comporta il rendering di 1 glifo. In genere, la maggior parte delle stringhe Unicode, il numero di caratteri e il numero di glifi di cui è stato eseguito il rendering sono uguali.

È possibile usare _tcslen() per ottenere la lunghezza della stringa. Per ANSI, _tcslen() restituisce il numero di byte. Per Unicode, _tcslen() restituisce il numero di WCHARs , ovvero WORD.

I caratteri di elaborazione speciali come schede e trattini morbidi che non sempre vengono disegnati possono influire sull'output disegnato. Vengono inclusi nel conteggio della lunghezza della stringa e dei caratteri, ma potrebbero non essere rappresentati direttamente da un glifo di cui è stato eseguito il rendering.

Alcune di queste funzioni consentono al chiamante di specificare la lunghezza come -1 per indicare che la stringa è null-terminate; in tal caso, la funzione calcola automaticamente il conteggio dei caratteri. Non tutte le funzioni offrono questa funzionalità. Specificato in base a una funzione; vedere la documentazione relativa alla singola funzione.