Freigeben über


GCP_RESULTSW 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_RESULTSW {
  DWORD  lStructSize;
  LPWSTR lpOutString;
  UINT   *lpOrder;
  int    *lpDx;
  int    *lpCaretPos;
  LPSTR  lpClass;
  LPWSTR lpGlyphs;
  UINT   nGlyphs;
  int    nMaxFit;
} GCP_RESULTSW, *LPGCP_RESULTSW;

Member

lStructSize

Die Größe der Struktur in Byte.

lpOutString

Ein Zeiger auf den Puffer, der die Ausgabezeichenfolge empfängt, oder ist NULL , 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 sortiert werden muss und das GCP_REORDER-Flag 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 ist NULL , wenn die Reihenfolgenindizes 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 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 GCP_REORDER-Flag zurückgibt, das angibt, dass die ursprüngliche Zeichenfolge neu sortiert werden muss. Beispielsweise gibt das lpOrder-Array in Hebräisch, in dem der Text von rechts nach links ausgeführt wird, die genauen Positionen jedes Elements 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 das Glyphenrendering ausgeführt wird, 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 array lpOrder wie folgt, um den Abstand für das i-te Zeichen in der ursprünglichen Zeichenfolge zu ermitteln:


width = lpDx[lpOrder[i]];

lpCaretPos

Ein Zeiger auf das Array, das die Caret-Positionswerte empfängt, oder ist NULL , wenn Caret-Positionen nicht benötigt werden. Jeder Wert gibt die Caretposition direkt vor dem entsprechenden Zeichen an. In einigen Sprachen befindet sich die Position des Carets für jedes Zeichen möglicherweise nicht sofort links neben dem Zeichen. Im Hebräischen beispielsweise, in dem der Text von rechts nach links läuft, befindet sich die Caretposition rechts neben dem Zeichen. Wenn die Glyphenreihenfolge abgeschlossen ist, entspricht lpCaretPos der ursprünglichen Zeichenfolge, nicht der Ausgabezeichenfolge. Dies bedeutet, dass einige benachbarte Werte möglicherweise identisch sind.

Die Werte in diesem Array befinden sich in der Eingabereihenfolge. Verwenden Sie das Array wie folgt, um den Wert der Caretposition für das i-th-Zeichen in der ursprünglichen Zeichenfolge zu finden:


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 festgelegt werden sollen, 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 auf 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 Einzelbytezeichensatz 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 Dezimalzeichen.
GCPCLASS_LATINNUMERICTERMINATOR
Nur Eingabe. Zeichen, das zum Beenden lateinischer Ziffern verwendet wird, z. B. ein Plus- oder Minuszeichen.
GCPCLASS_NEUTRAL
Nur Eingabe. Zeichen weist keine spezifische Klassifizierung auf.
GCPCLASS_NUMERICSEPARATOR
Nur Eingabe. Zeichen, die zum Trennen von Ziffern verwendet werden, z. B. kommas oder Dezimalstellen.
 

Für Sprachen, die das GCP_REORDER-Flag verwenden, können die folgenden Werte auch mit dem GCP_CLASSIN-Flag 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 Lesereihenfolge von links nach rechts vor der Zeichenfolge zu binden.
GCPCLASS_PREBOUNDRTL
Legen Sie lpClass[0] auf GCPCLASS_PREBOUNDRTL fest, um die Zeichenfolge an die Lesereihenfolge von rechts nach links vor der Zeichenfolge zu binden.
GCPCLASS_POSTBOUNDLTR
Legen Sie lpClass[0] auf GCPCLASS_POSTBOUNDLTR fest, um die Zeichenfolge an die Lesereihenfolge von links nach rechts nach der Zeichenfolge zu binden.
GCPCLASS_POSTBOUNDRTL
Legen Sie lpClass[0] auf GCPCLASS_POSTBOUNDRTL fest, um die Zeichenfolge an die Lesereihenfolge von rechts nach links nach der Zeichenfolge zu binden.
 

Um das Layout eines Zeichens auf bestimmte Weise zu erzwingen, 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 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 GCPCLASS_LATIN Wert von Bedeutung.

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 Glyphenrendering 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. Wenn eine Neuanordnung erforderlich ist, ist die Reihenfolge der Glyphen möglicherweise nicht sequenziell.

Dieses Array ist nützlich, wenn mehrere Vorgänge für eine Zeichenfolge ausgeführt werden, die eine beliebige Form von Ligation, Kerning oder Reihenfolgewechsel 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 zusammengebändert werden. (Im Arabischen sind z. B. dreistellige Ligationen üblich.) Hierzu wird der maximal erforderliche Wert in lpGcpResults-lpGlyphen>[0] festgelegt. Wenn kein Maximum erforderlich ist, sollten Sie dieses Feld auf 0 festlegen.

Bei Sprachen wie Arabisch, in denen GetFontLanguageInfo das GCP_GLYPHSHAPE Flag 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 Wortes 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. beim Anzeigen eines Abschnitts mit gescrollten Text, ist dies möglicherweise nicht wahr. In diesen Fällen ist es wünschenswert, zu erzwingen, dass die ersten oder letzten Zeichen als keine Erst- oder Endform geformt werden. Um dies zu tun, wird wiederum die erste Position im lpGlyphs-Array verwendet, indem ein OR-Vorgang des Ligationswerts oben mit den Werten GCPGLYPH_LINKBEFORE und/oder GCPGLYPH_LINKAFTER ausgeführt wird. Beispielsweise ein Wert von GCPGLYPH_LINKBEFORE | 2 bedeutet, dass zweistellige Ligaturen der maximal erforderliche Wert 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 dieses Element auf die Größe der Arrays festgelegt werden, auf die von den Arrayzeigerelementen verwiesen wird. Bei der Ausgabe wird dies auf die Anzahl der eingegebenen Glyphen in den Ausgabearrays festgelegt. Wenn keine Glyphenersetzung erforderlich ist (d. h. jedes Eingabezeichen wird genau einer Glyphe zugeordnet), ist dieser Member mit dem Element bei der Eingabe identisch.

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