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

Plusieurs des 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. Le paramètre cchText de DrawTextEx est un exemple classique.

Chacune de ces fonctions a à la fois 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 d’octets 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 ». C’est généralement exact pour de nombreuses langues, y compris l’anglais, mais ce 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 dans les pages de codes DBCS prennent deux octets. De même, la plupart des caractères Unicode actuellement définis résident dans le plan multilingue de base (BMP) et leurs représentations UTF-16 tiennent dans un SEUL MOT, mais les caractères supplémentaires sont représentés en Unicode par des « substituts », qui nécessitent 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 d’octets d’une chaîne qui n’inclut pas le terminateur NULL . Pour la fonction Unicode, le nombre de longueurs est le nombre d’octets divisé par sizeof(WCHAR), qui est 2, sans compter le terminateur NULL . Le nombre de caractères est le nombre de caractères, qui peut ne pas être égal 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 composés pour créer 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 comme une seule entité. Les glyphes sont affichés. Par exemple, en Unicode, vous pouvez avoir une chaîne de longueur de 3, qui est de 2 caractères et qui entraîne le rendu d’un glyphe. Toutefois, en général, la longueur de 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 des WORD).

Les caractères de traitement spéciaux tels que les tabulations 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 le nombre 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 sous la forme -1 pour indiquer que la chaîne se termine par une valeur 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 fonction par fonction ; Consultez la documentation relative aux fonctions individuelles.