次の方法で共有


GCP_RESULTSA構造体 (wingdi.h)

GCP_RESULTS 構造体には、文字列内の文字に関する情報が含まれています。 この構造体は、GetCharacterPlacement 関数の結果を受け取ります。 一部の言語の場合、配列の最初の要素には、言語に依存する情報がさらに含まれる場合があります。

構文

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;

メンバーズ

lStructSize

構造体のサイズ (バイト単位)。

lpOutString

出力文字列を受け取るバッファーへのポインター。出力文字列が必要ない場合は NULL 。 出力文字列は、指定されたデバイスに表示される順序の元の文字列のバージョンです。 通常、出力文字列は元の文字列と同じですが、文字列を並べ替える必要があり、GCP_REORDER フラグが設定されている場合、または元の文字列が最大エクステントを超え、GCP_MAXEXTENT フラグが設定されている場合は、異なる場合があります。

lpOrder

順序付けインデックスを受け取る配列へのポインター。順序付けインデックスが必要ない場合は NULL 。 しかし、その意味は GCP_RESULTSの他の要素に依存します。 グリフインデックスを返す場合、インデックスは lpGlyphs 配列用です。グリフのインデックスが返されず、lpOrder が要求 場合、インデックスは lpOutString用です。 たとえば、後者の場合、lpOrder[i] の値は、出力文字列 lpOutString 内 lpString[i] の位置です。

これは通常、getFontLanguageInfo が GCP_REORDER フラグを返す場合に使用されます。これは、元の文字列の並べ替えが必要であることを示します。 たとえば、テキストが右から左に実行されるヘブライ語では、lpOrder 配列は、元の文字列内の各要素の正確な位置を示します。

lpDx

隣接する文字セル間の距離を受け取る配列へのポインター。または、これらの距離が不要な場合は NULL 。 グリフのレンダリングが行われると、距離は文字ではなくグリフに対するため、結果の配列は ExtTextOut 関数で使用できます。

この配列内の距離は表示順です。 元の文字列の 文字の距離を見つけるには、次のように lpOrder 配列を使用します。


width = lpDx[lpOrder[i]];

lpCaretPos

キャレット位置の値を受け取るか、キャレット位置が不要な場合は NULL 配列へのポインター。 各値は、対応する文字の直前のキャレット位置を指定します。 一部の言語では、各文字のキャレットの位置が文字の左側にすぐに表示されない場合があります。 たとえば、テキストが右から左に実行されるヘブライ語では、キャレットの位置は文字の右にあります。 グリフの順序付けが行われた場合、lpCaretPos 出力文字列ではなく、元の文字列と一致します。 これは、隣接する一部の値が同じである可能性があることを意味します。

この配列内の値は入力順です。 元の文字列の 文字のキャレット位置の値を見つけるには、次のように配列を使用します。


position = lpCaretPos[i];

lpClass

文字分類を含む配列または文字分類を受け取る配列へのポインター。 この値は、文字列内の文字をレイアウトする方法を示し、GetStringTypeEx 関数によって返されるCT_CTYPE2値と似ています (ただし、同じではありません)。 配列の各要素は、0 または次のいずれかの値に設定できます。

価値 意味
GCPCLASS_ARABIC
アラビア文字。
GCPCLASS_HEBREW
ヘブライ語の文字。
GCPCLASS_LATIN
左から右の言語のラテン文字またはその他の 1 バイト文字セットの文字。
GCPCLASS_LATINNUMBER
左から右の言語のラテン文字またはその他の 1 バイト文字セットの数字。
GCPCLASS_LOCALNUMBER
現在のフォントに関連付けられている文字セットの数字。
 

さらに、lpClass 配列の値を GCP_CLASSIN フラグと共に指定する場合は、次のコードを使用できます。

価値 意味
GCPCLASS_LATINNUMERICSEPARATOR
入力のみ。 コンマや小数点などのラテン数字を区切るために使用される文字。
GCPCLASS_LATINNUMERICTERMINATOR
入力のみ。 プラス記号やマイナス記号など、ラテン数字を終了するために使用される文字。
GCPCLASS_NEUTRAL
入力のみ。 文字には特定の分類がありません。
GCPCLASS_NUMERICSEPARATOR
入力のみ。 コンマや小数点などの数字を区切るために使用される文字。
 

GCP_REORDER フラグを使用する言語では、次の値を GCP_CLASSIN フラグと共に使用することもできます。 lpClass 配列内の任意の場所で使用できる上記の値とは異なり、次の値はすべて配列の最初の位置でのみ使用されます。 すべて他の分類と組み合わせます。

GCPCLASSPOSTBOUNDLTR と GCPCLASSPOSTBOUNDRTL と同様に、GCPCLASS_PREBOUNDLTRとGCPCLASS_PREBOUNDRTLは相互に排他的であることに注意してください。

価値 意味
GCPCLASS_PREBOUNDLTR
lpClass[0] をGCPCLASS_PREBOUNDLTRに設定して、文字列の前の左から右の読み取り順序に文字列をバインドします。
GCPCLASS_PREBOUNDRTL
lpClass [0] をGCPCLASS_PREBOUNDRTLに設定して、文字列の前の右から左への読み取り順序に文字列をバインドします。
GCPCLASS_POSTBOUNDLTR
lpClass [0] をGCPCLASS_POSTBOUNDLTRに設定して、文字列の後の左から右の読み取り順序に文字列をバインドします。
GCPCLASS_POSTBOUNDRTL
lpClass[0] をGCPCLASS_POSTBOUNDRTLに設定して、文字列の後の右から左への読み取り順序に文字列をバインドします。
 

文字のレイアウトを特定の方法で強制的に実行するには、対応する配列要素の分類を事前設定します。この関数では、このような事前設定された分類は変更されず、0 に設定されている配列要素に対してのみ分類が計算されます。 既定の分類は、GCP_CLASSIN フラグが設定され、lpClass 配列が指定されている場合にのみ使用されます。

GetFontLanguageInfo 現在のフォントのGCP_REORDERを返さない場合は、GCPCLASS_LATIN値のみが意味を持ちます。

lpGlyphs

文字列のレンダリングに使用されるグリフを識別する値を受け取る配列へのポインター。グリフのレンダリングが不要な場合は NULL 。 文字列に連結されたグリフが含まれている場合、配列内のグリフの数が元の文字列の文字数よりも少なくなる可能性があります。 また、並べ替えが必要な場合は、グリフの順序が連続していない可能性があります。

この配列は、任意の形式のライゲーション、カーニング、または順序切り替えを持つ文字列に対して複数の操作が行われている場合に便利です。 後続の操作にこの配列の値を使用すると、グリフ インデックスの生成に必要な時間を毎回節約できます。

この配列には常にグリフ インデックスが含まれており、ExtTextOut 関数でこの配列を使用する場合は、常にETO_GLYPH_INDEX値を使用する必要があります。

GCP_LIGATEを使用する場合は、連結する文字数を制限できます。 (たとえば、アラビア語では、3 文字の結紮が一般的です)。 これを行うには、lpGcpResults->lpGlyphs[0] に必要な最大値を設定します。 最大値が必要ない場合は、このフィールドを 0 に設定する必要があります。

GetFontLanguageInfo がGCP_GLYPHSHAPE フラグを返すアラビア語などの言語の場合、文字のグリフは、文字が単語の先頭、中央、または末尾のいずれにあるかによって異なります。 通常、入力文字列の最初の文字も単語の最初の文字になり、入力文字列の最後の文字は単語の最後の文字として扱われます。 ただし、表示される文字列が、スクロールされたテキストのセクションを表示する場合など、完全な文字列のサブセットである場合は、true ではない可能性があります。 このような場合は、最初または最後の文字を最初または最後の形式ではない形にすることが望ましいです。 これを行うには、lpGlyphs 配列内の最初の場所を使用して、上記の連結値の OR 演算を実行し、値をGCPGLYPH_LINKBEFOREまたはGCPGLYPH_LINKAFTERします。 たとえば、GCPGLYPH_LINKBEFORE | の値です。2 は、2 文字の合字が最大で必要であり、文字列の最初の文字は単語の途中にあるかのように扱う必要があることを意味します。

nGlyphs

入力時に、このメンバーは配列ポインター メンバーが指す配列のサイズに設定する必要があります。 出力時に、これは出力配列に入力されたグリフの数に設定されます。 グリフの置換が必要ない場合 (つまり、各入力文字が 1 つのグリフに正確にマップされる)、このメンバーは入力時と同じです。

nMaxFit

GetCharacterPlacement 関数の nMaxExtent パラメーターで指定されたエクステント内に収まる文字数。 GCP_MAXEXTENTまたはGCP_JUSTIFY値が設定されている場合、この値は元の文字列の文字数より小さい可能性があります。 このメンバーは、GCP_MAXEXTENT値とGCP_JUSTIFY値のどちらが指定されているかに関係なく設定されます。 出力グリフ 数を指定する nGlyphsとは異なり、nMaxFit 入力文字列からの文字数を参照します。 ラテン SBCS 言語の場合、これは同じになります。

備考

lpGlyphslpOutString、または不要かどうかは、GetFontLanguageInfo 呼び出しの結果によって異なります。

英語などの言語のフォントの場合、GCP_DBCS、GCP_REORDER、GCP_GLYPHSHAPE、GCP_LIGATE、GCP_DIACRITIC、またはGCP_KASHIDAフラグが返されない場合、どちらの配列も適切な操作には必要ありません。 (必須ではありませんが、引き続き使用できます。lpOutString 配列を使用する場合、GetCharacterPlacementに渡される lpInputString とまったく同じになります。ただし、GCP_MAXEXTENTが使用されている場合、lpOutString には、元の文字列の正確なコピーではなく、切り捨てられた文字列が含まれます。

ヘブライ語などの言語のフォントの場合は、並べ替えを行いますが、通常は追加のグリフ図形を持たない場合は、lpOutString 使用する必要があります。 これにより、文字列が読み取り可能な順序になります。 ただし、lpGlyphs 配列は通常必要ありません。 (フォントが TrueType/Open フォントの場合、ヘブライ語には追加のグリフを含めることができます)。

GetFontLanguageInfo がGCP_GLYPHSHAPE フラグを返すタイ語やアラビア語などの言語の場合、lpOutString は、getCharacterPlacementに渡される文字列の表示可能な順序 与えますが、値は未整形の文字のままです。 適切に表示するには、lpGlyphs 配列を使用する必要があります。

手記

wingdi.h ヘッダーは、unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとしてGCP_RESULTSを定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー wingdi.h (Windows.h を含む)

関連項目

ExtTextOut を する

フォントとテキストの構造

フォントとテキストの概要

GetCharacterPlacement の

GetFontLanguageInfo を する