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 traditionell, dies als eine "Zeichenanzahl" zu betrachten. Dies ist in der Regel für viele Sprachen korrekt, einschließlich Englisch, aber es ist im Allgemeinen nicht korrekt. In "ANSI"-Zeichenfolgen nehmen Zeichen in SBCS-Codepages jeweils ein Byte an, aber die meisten Zeichen in 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, für die zwei WORDs erforderlich sind.

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 ohne null-Abschlusszeichen angegeben. 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 zu einer Glyphe zusammengesetzt werden können. Die Längenanzahl ist die Datenmenge. Die 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 umfasst und dazu führt, dass 1 Glyphe gerendert wird. In der Regel sind jedoch die meisten Unicode-Zeichenfolgenlä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 von WCHARs (d. h. WORDs) zurück.

Spezielle Verarbeitungszeichen wie Registerkarten und weiche Bindestriche, die nicht immer gezeichnet werden, können sich auf die gezeichnete Ausgabe auswirken. Sie werden in die Zeichenfolgenlänge und die Anzahl der Zeichen eingeschlossen, werden aber möglicherweise nicht direkt durch eine gerenderte Glyphe dargestellt.

Einige dieser Funktionen ermöglichen es dem Aufrufer, die Länge als -1 anzugeben, um anzugeben, dass die Zeichenfolge NULL-beendet ist. In diesem Fall berechnet die Funktion automatisch die Zeichenanzahl. Nicht alle Funktionen bieten diese Funktion. Dies wird auf Funktionsbasis angegeben; Weitere Informationen finden Sie in der Dokumentation zu den einzelnen Funktionen.