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. Bei einigen Sprachen enthält das erste Element in den Arrays möglicherweise weitere sprachabhängige Informationen.
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;
Angehörige
lStructSize
Die Größe der Struktur in Bytes.
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 sich in der Reihenfolge befindet, in der auf einem angegebenen Gerät angezeigt wird. In der Regel ist die Ausgabezeichenfolge identisch mit der ursprünglichen Zeichenfolge, kann jedoch unterschiedlich sein, wenn die Zeichenfolge neu angeordnet werden muss und das flag GCP_REORDER festgelegt wird oder wenn die ursprüngliche Zeichenfolge den maximalen Umfang überschreitet und das GCP_MAXEXTENT Flag festgelegt ist.
lpOrder
Ein Zeiger auf das Array, das Sortierindizes empfängt oder NULL- ist, wenn die Sortierindizes nicht benötigt werden. Seine Bedeutung hängt jedoch von den anderen Elementen der GCP_RESULTSab. Wenn Glyphenindizes zurückgegeben werden sollen, gelten die Indizes für die lpGlyphen Arrays; Wenn Glyphenindizes nicht zurückgegeben werden und lpOrder- angefordert wird, gelten die Indizes für lpOutString-. In letzterem Fall ist beispielsweise der Wert von lpOrder[i] die Position 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 anordnen muss. In Hebräisch, in dem der Text von rechts nach links verläuft, gibt das lpOrder- Array 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 NULL- ist, wenn diese Abstände nicht benötigt werden. Wenn das Rendern von Glyphen erfolgt, sind die Entfernungen für die Glyphen nicht für die Zeichen, sodass das resultierende Array mit der ExtTextOut Funktion verwendet werden kann.
Die Entfernungen in diesem Array sind in der Anzeigereihenfolge. Um den Abstand für das ith Zeichen in der ursprünglichen Zeichenfolge zu finden, verwenden Sie das array lpOrder wie folgt:
width = lpDx[lpOrder[i]];
lpCaretPos
Ein Zeiger auf das Array, das die Caretpositionswerte empfängt oder NULL- ist, wenn Caretpositionen nicht 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 direkt links neben dem Zeichen. Beispielsweise befindet sich in Hebräisch, in dem der Text von rechts nach links verläuft, die Caretposition rechts neben dem Zeichen. Wenn die Glyphenreihenfolge erfolgt, entspricht lpCaretPos der ursprünglichen Zeichenfolge und nicht der Ausgabezeichenfolge. Dies bedeutet, dass einige angrenzende Werte identisch sein können.
Die Werte in diesem Array befinden sich in der Eingabereihenfolge. Um den Caretpositionswert für die ith Zeichen in der ursprünglichen Zeichenfolge zu finden, 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 anordnen und mit den CT_CTYPE2 Werten vergleichbar sind, die von der GetStringTypeEx--Funktion zurückgegeben werden. Jedes Element des Arrays kann auf Null oder einen der folgenden Werte festgelegt werden.
Darüber hinaus kann Folgendes verwendet werden, wenn Werte im lpClass Array mit dem GCP_CLASSIN Flag bereitgestellt werden.
Bei 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 an einer beliebigen Stelle im lpClass Array verwendet werden können, werden alle folgenden Werte nur an der ersten Position im Array verwendet. Alle kombinieren sich mit anderen Klassifizierungen.
Beachten Sie, dass GCPCLASS_PREBOUNDLTR und GCPCLASS_PREBOUNDRTL sich gegenseitig ausschließen, ebenso wie GCPCLASSPOSTBOUNDLTR und GCPCLASSPOSTBOUNDRTL.
Um die Durchführung des Layouts eines Zeichens auf eine bestimmte Weise zu erzwingen, stellen 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 Null festgelegt wurden. Voreingestellte Klassifizierungen werden nur verwendet, wenn das GCP_CLASSIN Flag festgelegt ist und das lpClass Array bereitgestellt wird.
Wenn GetFontLanguageInfo nicht GCP_REORDER für die aktuelle Schriftart zurückgibt, ist nur der GCPCLASS_LATIN Wert sinnvoll.
lpGlyphs
Ein Zeiger auf das Array, das die Werte empfängt, die die Glyphen identifizieren, die zum Rendern der Zeichenfolge verwendet werden, oder ist NULL-, wenn kein Glyphenrendering erforderlich ist. Die Anzahl der Glyphen im Array kann kleiner als die Anzahl der Zeichen in der ursprünglichen Zeichenfolge sein, wenn die Zeichenfolge ligaierte Glyphen enthält. Auch wenn eine Neuanordnung erforderlich ist, kann die Reihenfolge der Glyphen nicht sequenziell sein.
Dieses Array ist nützlich, wenn mehrere Vorgänge für eine Zeichenfolge ausgeführt werden, 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 andernfalls erforderlich ist, um die Glyphenindizes jedes Mal zu generieren.
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 einschränken, die zusammen ligiert werden. (In Arabisch sind z. B. dreistellige Ligationen üblich). Dies geschieht durch Festlegen der maximalen Erforderlichen in lpGcpResults->lpGlyphen[0]. Wenn kein Maximum erforderlich ist, sollten Sie dieses Feld auf Null festlegen.
Bei Sprachen wie Arabisch, bei 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 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. 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 anfangs- oder endgültigen Formen geformt werden. Hierzu wird die erste Position in den lpGlyphen Arrays verwendet, indem ein OR-Vorgang des oben genannten Ligationswerts mit den Werten GCPGLYPH_LINKBEFORE und/oder GCPGLYPH_LINKAFTER ausgeführt wird. Beispiel: ein Wert von GCPGLYPH_LINKBEFORE | 2 bedeutet, dass zweistellige Ligaturen der maximal erforderliche Wert sind, und das erste Zeichen in der Zeichenfolge sollte so behandelt werden, als ob es sich in der Mitte eines Worts befindet.
nGlyphs
Bei eingaben muss dieses Element auf die Größe der Arrays festgelegt werden, auf die von den Arrayzeigermember verwiesen wird. Bei der Ausgabe wird dies auf die Anzahl der Glyphen festgelegt, die in den Ausgabearrays ausgefüllt sind. Wenn keine Glyphenersetzung erforderlich ist (d. h. jedes Eingabezeichen entspricht genau einer Glyphe), ist dieses Element identisch mit der Eingabe.
nMaxFit
Die Anzahl der Zeichen, die in die vom nMaxExtent Parameter der GetCharacterPlacement-Funktion Angegebenen Umfangs passen. Wenn der wert GCP_MAXEXTENT oder GCP_JUSTIFY festgelegt ist, kann dieser Wert kleiner als die Anzahl der Zeichen in der ursprünglichen Zeichenfolge sein. Dieses Element wird unabhängig davon festgelegt, ob der wert GCP_MAXEXTENT oder GCP_JUSTIFY angegeben wird. Im Gegensatz zu nGlyphen, die die Anzahl der Ausgabeglyphen angibt, bezieht sich nMaxFit auf die Anzahl der Zeichen aus der Eingabezeichenfolge. Bei lateinischen SBCS-Sprachen ist dies identisch.
Bemerkungen
Ob die lpGlyphen, 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 für den ordnungsgemäßen Betrieb keines der Arrays erforderlich. (Obwohl nicht erforderlich, können sie weiterhin verwendet werden. Wenn das lpOutString--Array verwendet wird, entspricht es genau dem lpInputString- an GetCharacterPlacementübergeben.) Beachten Sie jedoch, dass, wenn GCP_MAXEXTENT verwendet wird, lpOutString- die abgeschnittene Zeichenfolge enthält, wenn sie verwendet wird, NICHT eine genaue Kopie des Originals.
Bei Schriftarten für Sprachen wie Hebräisch, die eine Neuanordnung haben, aber in der Regel keine zusätzlichen Glyphenformen aufweisen, sollten lpOutString- verwendet werden. Dadurch wird die Zeichenfolge in der bildschirmlesbaren Reihenfolge angezeigt. Die lpGlyphen Arrays sind jedoch in der Regel nicht erforderlich. (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 die lpOutString- die anzeigelesbare Reihenfolge der Zeichenfolge, die an GetCharacterPlacementübergeben wird, aber die Werte sind weiterhin die unformatierten Zeichen. Zur ordnungsgemäßen Anzeige müssen die lpGlyphen Arrays verwendet werden.
Anmerkung
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 |
---|---|
mindestens unterstützte Client- | Windows 2000 Professional [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows 2000 Server [nur Desktop-Apps] |
Header- | wingdi.h (enthalten Windows.h) |
Siehe auch
Schriftart- und Textstrukturen