Share via


GCP_RESULTSA Struktur (wingdi.h)

Die GCP_RESULTS-Struktur enthält Informationen zu Zeichen in einer Zeichenfolge. Diese Struktur empfängt die Ergebnisse der GetCharacterPlacement-Funktion . Für einige Sprachen kann das erste Element in den Arrays weitere sprachabhängige Informationen enthalten.

Syntax

typedef struct tagGCP_RESULTSA {
  DWORD  lStructSize;
  LPSTR  lpOutString;
  UINT   *lpOrder;
  int    *lpDx;
  int    *lpCaretPos;
  LPSTR  lpClass;
  LPWSTR lpGlyphs;
  UINT   nGlyphs;
  int    nMaxFit;
} GCP_RESULTSA, *LPGCP_RESULTSA;

Member

lStructSize

Die Größe der Struktur in Byte.

lpOutString

Ein Zeiger auf den Puffer, der die Ausgabezeichenfolge empfängt, oder null ist, wenn die Ausgabezeichenfolge nicht benötigt wird. Die Ausgabezeichenfolge ist eine Version der ursprünglichen Zeichenfolge, die in der Reihenfolge liegt, die auf einem angegebenen Gerät angezeigt wird. In der Regel ist die Ausgabezeichenfolge mit der ursprünglichen Zeichenfolge identisch, kann sich jedoch unterscheiden, wenn die Zeichenfolge neu angeordnet werden muss und das flag GCP_REORDER festgelegt ist oder wenn die ursprüngliche Zeichenfolge den maximalen Umfang überschreitet und das GCP_MAXEXTENT-Flag festgelegt ist.

lpOrder

Ein Zeiger auf das Array, das Reihenfolgenindizes empfängt, oder null ist, wenn die Sortierungsindizes nicht benötigt werden. Seine Bedeutung hängt jedoch von den anderen Elementen der GCP_RESULTS ab. Wenn Glyphenindizes zurückgegeben werden sollen, gelten die Indizes für das lpGlyphs-Array ; Wenn Glyphenindizes nicht zurückgegeben werden und lpOrder angefordert wird, gelten die Indizes für lpOutString. Im letzteren Fall ist der Wert von lpOrder[i] beispielsweise die Position von lpString[i] in der Ausgabezeichenfolge lpOutString.

Dies wird in der Regel verwendet, wenn GetFontLanguageInfo das flag GCP_REORDER zurückgibt, das angibt, dass die ursprüngliche Zeichenfolge neu angeordnet werden muss. Beispielsweise gibt das lpOrder-Array in Hebräisch, in dem der Text von rechts nach links verläuft, die genauen Positionen der einzelnen Elemente in der ursprünglichen Zeichenfolge an.

lpDx

Ein Zeiger auf das Array, das die Abstände zwischen benachbarten Zeichenzellen empfängt, oder ist NULL , wenn diese Abstände nicht benötigt werden. Wenn Glyphen gerendert werden, gelten die Abstände für die Glyphen und nicht für die Zeichen, sodass das resultierende Array mit der ExtTextOut-Funktion verwendet werden kann.

Die Entfernungen in diesem Array befinden sich in der Anzeigereihenfolge. Verwenden Sie das lpOrder-Array wie folgt, um den Abstand für das ith-Zeichen in der ursprünglichen Zeichenfolge zu ermitteln:


width = lpDx[lpOrder[i]];

lpCaretPos

Ein Zeiger auf das Array, das die Caretpositionswerte empfängt, oder null ist, wenn keine Caretpositionen benötigt werden. Jeder Wert gibt die Caretposition unmittelbar vor dem entsprechenden Zeichen an. In einigen Sprachen befindet sich die Position des Carets für jedes Zeichen möglicherweise nicht unmittelbar links vom Zeichen. In Hebräisch, in dem der Text von rechts nach links verläuft, ist die Caretposition rechts neben dem Zeichen. Wenn die Glyphenreihenfolge abgeschlossen ist, stimmt lpCaretPos mit der ursprünglichen Zeichenfolge und nicht mit der Ausgabezeichenfolge überein. Dies bedeutet, dass einige benachbarte Werte identisch sein können.

Die Werte in diesem Array befinden sich in der Eingabereihenfolge. Um den Wert der Caretposition für das i-te Zeichen in der ursprünglichen Zeichenfolge zu ermitteln, verwenden Sie das Array wie folgt:


position = lpCaretPos[i];

lpClass

Ein Zeiger auf das Array, das Zeichenklassifizierungen enthält und/oder empfängt. Die Werte geben an, wie Zeichen in der Zeichenfolge anlegt werden, und sind ähnlich (aber nicht identisch) mit den CT_CTYPE2 Werten, die von der GetStringTypeEx-Funktion zurückgegeben werden. Jedes Element des Arrays kann auf null oder einen der folgenden Werte festgelegt werden.

Wert Bedeutung
GCPCLASS_ARABIC
Arabisches Zeichen.
GCPCLASS_HEBREW
Hebräisches Zeichen.
GCPCLASS_LATIN
Zeichen aus einem lateinischen oder einem anderen Einbytezeichensatz für eine Sprache von links nach rechts.
GCPCLASS_LATINNUMBER
Ziffer aus einem Lateinischen oder einem anderen Einbytezeichensatz für eine Sprache von links nach rechts.
GCPCLASS_LOCALNUMBER
Ziffer aus dem Zeichensatz, der der aktuellen Schriftart zugeordnet ist.
 

Darüber hinaus kann Folgendes verwendet werden, wenn Werte im lpClass-Array mit dem flag GCP_CLASSIN angegeben werden.

Wert Bedeutung
GCPCLASS_LATINNUMERICSEPARATOR
Nur Eingabe. Zeichen, das verwendet wird, um lateinische Ziffern zu trennen, z. B. ein Komma oder ein Dezimaltrennzeichen.
GCPCLASS_LATINNUMERICTERMINATOR
Nur Eingabe. Zeichen, das zum Beenden von lateinischen Ziffern verwendet wird, z. B. ein Plus- oder Minuszeichen.
GCPCLASS_NEUTRAL
Nur Eingabe. Das Zeichen weist keine spezifische Klassifizierung auf.
GCPCLASS_NUMERICSEPARATOR
Nur Eingabe. Zeichen, das zum Trennen von Ziffern verwendet wird, z. B. ein Komma oder ein Dezimaltrennzeichen.
 

Für Sprachen, die das flag GCP_REORDER verwenden, können die folgenden Werte auch mit dem flag GCP_CLASSIN verwendet werden. Im Gegensatz zu den vorherigen Werten, die überall im lpClass-Array verwendet werden können, werden alle folgenden Werte nur an der ersten Position im Array verwendet. Alle werden mit anderen Klassifizierungen kombiniert.

Beachten Sie, dass GCPCLASS_PREBOUNDLTR und GCPCLASS_PREBOUNDRTL sich gegenseitig ausschließen, ebenso wie GCPCLASSPOSTBOUNDLTR und GCPCLASSPOSTBOUNDRTL.

Wert Bedeutung
GCPCLASS_PREBOUNDLTR
Legen Sie lpClass[0] auf GCPCLASS_PREBOUNDLTR fest, um die Zeichenfolge an die Leserichtung von links nach rechts vor der Zeichenfolge zu binden.
GCPCLASS_PREBOUNDRTL
Legen Sie lpClass[0] auf GCPCLASS_PREBOUNDRTL fest, um die Zeichenfolge an die Leserichtung von rechts nach links vor der Zeichenfolge zu binden.
GCPCLASS_POSTBOUNDLTR
Legen Sie lpClass[0] auf GCPCLASS_POSTBOUNDLTR fest, um die Zeichenfolge nach der Zeichenfolge an die Leserichtung von links nach rechts zu binden.
GCPCLASS_POSTBOUNDRTL
Legen Sie lpClass[0] auf GCPCLASS_POSTBOUNDRTL fest, um die Zeichenfolge an die Leserichtung von rechts nach links nach der Zeichenfolge zu binden.
 

Um zu erzwingen, dass das Layout eines Zeichens auf eine bestimmte Weise ausgeführt wird, legen Sie die Klassifizierung für das entsprechende Arrayelement vor. Die Funktion lässt solche voreingestellten Klassifizierungen unverändert und berechnet Klassifizierungen nur für Arrayelemente, die auf 0 (null) festgelegt wurden. Voreingestellte Klassifizierungen werden nur verwendet, wenn das flag GCP_CLASSIN festgelegt ist und das lpClass-Array angegeben wird.

Wenn GetFontLanguageInfo keine GCP_REORDER für die aktuelle Schriftart zurückgibt, ist nur der wert GCPCLASS_LATIN sinnvoll.

lpGlyphs

Ein Zeiger auf das Array, das die Werte empfängt, die die zum Rendern der Zeichenfolge verwendeten Glyphen identifizieren, oder ist NULL , wenn das Rendern von Glyphen nicht erforderlich ist. Die Anzahl der Glyphen im Array kann kleiner sein als die Anzahl der Zeichen in der ursprünglichen Zeichenfolge, wenn die Zeichenfolge ligaierte Glyphen enthält. Auch wenn eine Neuanordnung erforderlich ist, ist die Reihenfolge der Glyphen möglicherweise nicht sequenziell.

Dieses Array ist nützlich, wenn mehr als ein Vorgang für eine Zeichenfolge ausgeführt wird, die eine beliebige Form von Ligation, Kerning oder Order-Switching aufweist. Die Verwendung der Werte in diesem Array für nachfolgende Vorgänge spart die Zeit, die sonst zum Generieren der Glyphenindizes jedes Mal erforderlich ist.

Dieses Array enthält immer Glyphenindizes, und der ETO_GLYPH_INDEX Wert muss immer verwendet werden, wenn dieses Array mit der ExtTextOut-Funktion verwendet wird.

Wenn GCP_LIGATE verwendet wird, können Sie die Anzahl der Zeichen begrenzen, die in ligaiert werden. (Im Arabischen sind z. B. dreistellige Ligationen üblich.) Dies erfolgt durch Festlegen des maximal erforderlichen Werts in lpGcpResults-lpGlyphs>[0]. Wenn kein Maximum erforderlich ist, sollten Sie dieses Feld auf Null festlegen.

Bei Sprachen wie Arabisch, bei denen GetFontLanguageInfo das flag GCP_GLYPHSHAPE zurückgibt, unterscheiden sich die Glyphen für ein Zeichen je nachdem, ob sich das Zeichen am Anfang, in der Mitte oder am Ende eines Worts befindet. In der Regel ist das erste Zeichen in der Eingabezeichenfolge auch das erste Zeichen in einem Wort, und das letzte Zeichen in der Eingabezeichenfolge wird als letztes Zeichen in einem Wort behandelt. Wenn die angezeigte Zeichenfolge jedoch eine Teilmenge der vollständigen Zeichenfolge ist, z. B. bei der Anzeige eines Abschnitts mit gescrollten Text, ist dies möglicherweise nicht der Fall. In diesen Fällen ist es wünschenswert, zu erzwingen, dass das erste oder letzte Zeichen als keine Erst- oder Endform geformt wird. Dazu wird wiederum die erste Position im lpGlyphs-Array verwendet, indem ein OR-Vorgang des obigen Ligationswerts mit den Werten GCPGLYPH_LINKBEFORE und/oder GCPGLYPH_LINKAFTER ausgeführt wird. Beispielsweise ein Wert von GCPGLYPH_LINKBEFORE | 2 bedeutet, dass zweistellige Ligaturen maximal erforderlich sind und das erste Zeichen in der Zeichenfolge so behandelt werden sollte, als ob es sich in der Mitte eines Worts befindet.

nGlyphs

Bei der Eingabe muss dieser Member auf die Größe der Arrays festgelegt werden, auf die die Arrayzeigermember verweisen. Bei der Ausgabe wird dies auf die Anzahl der in den Ausgabearrays ausgefüllten Glyphen festgelegt. Wenn keine Glyphenersetzung erforderlich ist (d. h. jedes Eingabezeichen wird genau einer Glyphe zugeordnet), ist dieser Member identisch mit der Eingabe.

nMaxFit

Die Anzahl der Zeichen, die in die durch den nMaxExtent-Parameter der GetCharacterPlacement-Funktion angegebenen Blöcke passen. Wenn der GCP_MAXEXTENT- oder GCP_JUSTIFY-Wert festgelegt ist, kann dieser Wert kleiner als die Anzahl der Zeichen in der ursprünglichen Zeichenfolge sein. Dieser Member wird unabhängig davon festgelegt, ob der GCP_MAXEXTENT- oder GCP_JUSTIFY-Wert angegeben wird. Im Gegensatz zu nGlyphen, die die Anzahl der Ausgabeglyphen angibt, bezieht sich nMaxFit auf die Anzahl der Zeichen aus der Eingabezeichenfolge. Für lateinische SBCS-Sprachen ist dies identisch.

Hinweise

Ob lpGlyphs, lpOutString oder keines erforderlich ist, hängt von den Ergebnissen des GetFontLanguageInfo-Aufrufs ab.

Im Fall einer Schriftart für eine Sprache wie Englisch, in der keines der GCP_DBCS, GCP_REORDER, GCP_GLYPHSHAPE, GCP_LIGATE, GCP_DIACRITIC oder GCP_KASHIDA-Flags zurückgegeben wird, ist keines der Arrays für den ordnungsgemäßen Betrieb erforderlich. (Obwohl sie nicht erforderlich sind, können sie weiterhin verwendet werden. Wenn das lpOutString-Array verwendet wird, entspricht es genau dem an GetCharacterPlacement übergebenen lpInputString.) Beachten Sie jedoch, dass bei Verwendung GCP_MAXEXTENT lpOutString die abgeschnittene Zeichenfolge enthält, wenn sie verwendet wird, KEINE exakte Kopie des Originals.

Bei Schriftarten für Sprachen wie Hebräisch, die zwar neu angeordnet werden, aber in der Regel keine zusätzlichen Glyphenformen aufweisen, sollte lpOutString verwendet werden. Dadurch wird die Zeichenfolge in der bildschirmlesbaren Reihenfolge angezeigt. Das lpGlyphs-Array wird jedoch in der Regel nicht benötigt. (Hebräisch kann zusätzliche Glyphen aufweisen, wenn die Schriftart eine TrueType/Open-Schriftart ist.)

Bei Sprachen wie Thai oder Arabisch, in denen GetFontLanguageInfo das GCP_GLYPHSHAPE-Flag zurückgibt, gibt lpOutString die anzeigelesbare Reihenfolge der an GetCharacterPlacement übergebenen Zeichenfolge an, aber die Werte bleiben die unförmigen Zeichen. Für eine ordnungsgemäße Anzeige muss das lpGlyphs-Array verwendet werden.

Hinweis

Der wingdi.h-Header definiert GCP_RESULTS als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht Codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile wingdi.h (windows.h einschließen)

Weitere Informationen

ExtTextOut

Schriftarten- und Textstrukturen

Übersicht über Schriftarten und Text

GetCharacterPlacement

GetFontLanguageInfo