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.
Darüber hinaus kann Folgendes verwendet werden, wenn Werte im lpClass-Array mit dem flag GCP_CLASSIN angegeben werden.
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.
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
Schriftarten- und Textstrukturen