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 関数で使用できます。

この配列内の距離は表示順です。 元の文字列の i番目 の文字の距離を検索するには、次のように lpOrder 配列を使用します。


width = lpDx[lpOrder[i]];

lpCaretPos

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

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


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 フラグを返すタイ語やアラビア語などの言語の場合、lpOutStringGetCharacterPlacement に渡される文字列の表示可能な順序を指定しますが、値は依然として整形されていない文字になります。 適切に表示するには、 lpGlyphs 配列を 使用する必要があります。

注意

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

要件

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

こちらもご覧ください

ExtTextOut

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

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

GetCharacterPlacement

GetFontLanguageInfo