Spécification de la longueur de la chaîne de sortie de texte

Plusieurs fonctions de police et de sortie de texte ont un paramètre qui spécifie la longueur de la chaîne de sortie de texte. Un exemple typique est le paramètre cchText de DrawTextEx.

Chacune de ces fonctions possède une version « ANSI » et une version Unicode (par exemple , DrawTextExA et DrawTextExW, respectivement). Pour la version « ANSI » de chaque fonction, la longueur est spécifiée en tant que nombre BYTE et pour la fonction Unicode, elle est spécifiée en tant que nombre WORD.

Il est traditionnel de considérer cela comme un « nombre de caractères ». Cela est généralement exact pour de nombreuses langues, y compris l’anglais, mais il n’est pas exact en général. Dans les chaînes « ANSI », les caractères des pages de code SBCS prennent un octet chacun, mais la plupart des caractères des pages de code DBCS prennent deux octets. De même, la plupart des caractères Unicode définis résident dans le plan multilingue de base (BMP) et leurs représentations UTF-16 s’intègrent dans un MOT, mais les caractères supplémentaires sont représentés dans Unicode par « substitution », ce qui nécessite deux WORD.

Chacune de ces fonctions prend un nombre de longueurs. Pour la version « ANSI » de chaque fonction, la longueur est spécifiée sous la forme d’une longueur de nombre BYTE d’une chaîne qui n’inclut pas le fintor NULL . Pour la fonction Unicode, le nombre de longueurs est le nombre d’octets divisé par sizeof(WCHAR), qui est 2, et non pas le fintor NULL . Le nombre de caractères est le nombre de caractères, ce qui peut ne pas égaux au nombre de longueurs de la chaîne. Dans certains cas, les caractères prennent plusieurs OCTETs pour ANSI (par exemple, un caractère DBCS ) et plusieurs MOTS pour Unicode (par exemple, des caractères de substitution). En outre, le nombre de glyphes peut ne pas être égal au nombre de caractères, car plusieurs caractères peuvent être composites pour faire un glyphe. Le nombre de longueurs est la quantité de données. Le nombre de caractères est le nombre d’unités traitées en tant qu’entité. Les Glyphes sont ce qui est rendu. Par exemple, dans Unicode, vous pouvez avoir une chaîne avec une longueur de 3, qui est de 2 caractères et qui entraîne un rendu de 1 glyphe. Toutefois, généralement, la plupart des chaînes Unicode, le nombre de caractères et le nombre de glyphes rendus sont égaux.

Vous pouvez utiliser _tcslen() pour obtenir la longueur de chaîne. Pour ANSI, _tcslen() retourne le nombre d’octets. Pour Unicode, _tcslen() retourne le nombre de WCHAR (c’est-à-dire les WORD).

Les caractères de traitement spéciaux tels que les onglets et les traits d’union doux qui ne sont pas toujours dessinés peuvent affecter la sortie dessinée. Ils sont inclus dans la longueur de chaîne et les nombres de caractères, mais peuvent ne pas être directement représentés par un glyphe rendu.

Certaines de ces fonctions permettent à l’appelant de spécifier la longueur de -1 pour indiquer que la chaîne est terminée par null; dans ce cas, la fonction calcule automatiquement le nombre de caractères. Toutes les fonctions n’offrent pas cette fonctionnalité. Cela est spécifié sur une base de fonction par fonction; consultez la documentation de fonction individuelle.