Angeben der Länge der Textausgabezeichenfolge
Einige der Schriftart- und Textausgabefunktionen verfügen über einen Parameter, der die Länge der Textausgabezeichenfolge angibt. Ein typisches Beispiel ist der cchText-Parameter von DrawTextEx.
Jede dieser Funktionen verfügt sowohl über eine "ANSI"-Version als auch über eine Unicode-Version (z.B. DrawTextExA bzw. DrawTextExW). Für die "ANSI"-Version jeder Funktion wird die Länge als BYTE-Anzahl und für die Unicode-Funktion als WORD-Anzahl angegeben.
Es ist üblich, sich dies als "Zeichenanzahl" zu vorstellen. Dies gilt im Allgemeinen für viele Sprachen, einschließlich Englisch, aber im Allgemeinen nicht genau. In "ANSI"-Zeichenfolgen nehmen Zeichen in SBCS-Codepages jeweils ein Byte an, aber die meisten Zeichen auf DBCS-Codepages nehmen zwei Bytes an. Ebenso befinden sich die meisten derzeit definierten Unicode-Zeichen in der basic Multilingual Plane (BMP), und ihre UTF-16-Darstellungen passen in ein WORD, aber ergänzende Zeichen werden in Unicode durch "Ersatzzeichen" dargestellt, die zwei WORDs erfordern.
Jede dieser Funktionen nimmt eine Längenanzahl an. Für die "ANSI"-Version jeder Funktion wird die Länge als BYTE-Anzahllänge einer Zeichenfolge angegeben, die nicht das NULL-Abschlusszeichen enthält. Für die Unicode-Funktion ist die Längenanzahl die Byteanzahl dividiert durch sizeof(WCHAR), die 2 ist, ohne das NULL-Abschlusszeichen. Die Zeichenanzahl ist die Anzahl der Zeichen, die möglicherweise nicht der Längenanzahl der Zeichenfolge entspricht. In einigen Fällen nehmen Zeichen mehr als ein BYTE für ANSI (z. B. DBCS-Zeichen) und mehr als ein WORD für Unicode (z. B. Ersatzzeichen) an. Darüber hinaus entspricht die Anzahl der Glyphen möglicherweise nicht der Anzahl von Zeichen, da mehrere Zeichen zusammengesetzt werden können, um ein Glyphen zu erstellen. Längenanzahl ist die Datenmenge. Zeichenanzahl ist die Anzahl der Einheiten, die als eine Entität verarbeitet werden. Glyphen werden gerendert. In Unicode können Sie z. B. eine Zeichenfolge mit einer Länge von 3 haben, die 2 Zeichen lang ist und zu einem gerenderten Glyphen führt. In der Regel sind jedoch die meisten Unicode-Zeichenfolgen Länge, Zeichenanzahl und Anzahl der gerenderten Glyphen gleich.
Sie können _ tcslen() verwenden, um die Zeichenfolgenlänge abzurufen. Für ANSI _ gibt tcslen() die Anzahl der Bytes zurück. Für Unicode _ gibt tcslen() die Anzahl der WCHARs (d.h. WORDs) zurück.
Spezielle Verarbeitungszeichen wie Tabstopps und weiche Bindestriche, die nicht immer gezeichnet werden, können sich auf die gezeichnete Ausgabe auswirken. Sie werden in die Zeichenfolgenlänge und die Zeichenanzahl eingeschlossen, werden jedoch möglicherweise nicht direkt durch ein gerenderte Glyphe dargestellt.
Einige dieser Funktionen ermöglichen es dem Aufrufer, die Länge als -1 anzugeben, um anzugeben, dass die Zeichenfolge NULL-terminiert ist. In diesem Fall berechnet die Funktion die Zeichenanzahl automatisch. Nicht alle Funktionen bieten diese Funktion. Dies wird auf Funktionsbasis angegeben. weitere Informationen finden Sie in der Dokumentation zu einzelnen Funktionen.