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
lpOrder
順序付けインデックスを受け取る配列へのポインター。順序付けインデックスが必要ない場合は NULL
これは通常、getFontLanguageInfo
lpDx
隣接する文字セル間の距離を受け取る配列へのポインター。または、これらの距離が不要な場合は NULL
この配列内の距離は表示順です。 元の文字列の 文字
width = lpDx[lpOrder[i]];
lpCaretPos
キャレット位置の値を受け取るか、キャレット位置が不要な場合は NULL
この配列内の値は入力順です。 元の文字列の 文字
position = lpCaretPos[i];
lpClass
文字分類を含む配列または文字分類を受け取る配列へのポインター。 この値は、文字列内の文字をレイアウトする方法を示し、GetStringTypeEx 関数によって返されるCT_CTYPE2値と似ています (ただし、同じではありません)。 配列の各要素は、0 または次のいずれかの値に設定できます。
さらに、lpClass 配列の値を GCP_CLASSIN フラグと共に指定する場合は、次のコードを使用できます。
GCP_REORDER フラグを使用する言語では、次の値を GCP_CLASSIN フラグと共に使用することもできます。 lpClass 配列内の任意の場所で使用できる上記の値とは異なり、次の値はすべて配列の最初の位置でのみ使用されます。 すべて他の分類と組み合わせます。
GCPCLASSPOSTBOUNDLTR と GCPCLASSPOSTBOUNDRTL と同様に、GCPCLASS_PREBOUNDLTRとGCPCLASS_PREBOUNDRTLは相互に排他的であることに注意してください。
文字のレイアウトを特定の方法で強制的に実行するには、対応する配列要素の分類を事前設定します。この関数では、このような事前設定された分類は変更されず、0 に設定されている配列要素に対してのみ分類が計算されます。 既定の分類は、GCP_CLASSIN フラグが設定され、lpClass 配列が指定されている場合にのみ使用されます。
GetFontLanguageInfo
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値のどちらが指定されているかに関係なく設定されます。 出力グリフ
備考
lpGlyphs、lpOutString、または不要かどうかは、GetFontLanguageInfo 呼び出しの結果によって異なります。
英語などの言語のフォントの場合、GCP_DBCS、GCP_REORDER、GCP_GLYPHSHAPE、GCP_LIGATE、GCP_DIACRITIC、またはGCP_KASHIDAフラグが返されない場合、どちらの配列も適切な操作には必要ありません。 (必須ではありませんが、引き続き使用できます。
ヘブライ語などの言語のフォントの場合は、並べ替えを行いますが、通常は追加のグリフ図形を持たない場合は、lpOutString
手記
wingdi.h ヘッダーは、unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとしてGCP_RESULTSを定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー | wingdi.h (Windows.h を含む) |
関連項目
ExtTextOut を
GetCharacterPlacement の
GetFontLanguageInfo を