GetCharacterPlacementA 関数 (wingdi.h)
GetCharacterPlacement 関数は、文字の幅、キャレット配置、文字列内の順序、グリフのレンダリングなど、文字列に関する情報を取得します。 返される情報の種類は、dwFlags パラメーターによって異なり、指定された表示コンテキストで現在選択されているフォントに基づきます。 この関数は、指定した GCP_RESULTS 構造体または構造体で指定された 1 つ以上の配列に情報をコピーします。
この関数は、かつては文字列を操作するのに十分でしたが、ますます多くの言語やスクリプトを操作する必要があるため、廃止されました。 Uniscribe モジュールの機能に置き換わりました。 詳細については、「uniscribe
アプリケーションでは、GetFontLanguageInfo 関数を使用して、GCP_DIACRITIC、GCP_DBCS、GCP_USEKERNING、GCP_LIGATE、GCP_REORDER、GCP_GLYPHSHAPE、およびGCP_KASHIDAの値が現在選択されているフォントに対して有効かどうかを判断することをお勧めします。 無効な場合、GetCharacterPlacement は値を無視します。
GCP_NODIACRITICS値は定義されなくなり、使用しないでください。
構文
DWORD GetCharacterPlacementA(
[in] HDC hdc,
[in] LPCSTR lpString,
[in] int nCount,
[in] int nMexExtent,
[in, out] LPGCP_RESULTSA lpResults,
[in] DWORD dwFlags
);
パラメーター
[in] hdc
デバイス コンテキストへのハンドル。
[in] lpString
処理する文字列へのポインター。 nCount は文字列の長さを指定するため、文字列
[in] nCount
[in] nMexExtent
文字列が処理される最大エクステント (論理単位)。 処理された場合、このエクステントを超える文字は無視されます。 必要な順序またはグリフ配列の計算は、含まれる文字にのみ適用されます。 このパラメーターは、GCP_MAXEXTENT値が dwFlags パラメーターで指定されている場合にのみ使用されます。 関数が入力文字列を処理すると、合計エクステントがまだ最大値を超えない場合にのみ、各文字とそのエクステントが出力、エクステント、およびその他の配列に追加されます。 制限に達すると、処理が停止します。
[in, out] lpResults
関数の結果を受け取る GCP_RESULTS 構造体へのポインター。
[in] dwFlags
文字列を必要な配列に処理する方法を指定します。 このパラメーターには、次の値のうち 1 つ以上を指定できます。
価値 | 意味 |
---|---|
|
lpClass 配列に文字の事前分類が含まれていることを指定します。 分類は出力時と同じにすることができます。 文字の特定の分類がわからない場合は、配列内の対応する位置を 0 に設定する必要があります。 分類の詳細については、GCP_RESULTSを参照してください。 これは、getFontLanguageInfo GCP_REORDER フラグが返された場合にのみ役立ちます。 |
|
文字列内の分音記号の処理方法を決定します。 この値が設定されていない場合、分音記号は幅 0 の文字として扱われます。 たとえば、ヘブライ語の文字列には分音記号を含めることができますが、表示したくない場合があります。
GetFontLanguageInfo |
|
単語内の文字の位置に応じて、並べ替えやグリフの形状が異なる必要がある言語の場合、多くの場合、表示できない文字がコード ページに表示されます。 たとえば、ヘブライ語のコード ページには、出力文字列内の文字の最終的な配置を決定するのに役立つ左To-Right と右To-Left のマーカーがあります。 通常、これらは表示されず、lpGlyphs および lpDx 配列 |
|
現在のコード ページで現在選択されているフォントで定義されている標準図形以外の図形を使用して、文字列内の一部またはすべての文字を表示するように指定します。 アラビア語などの一部の言語では、この値が指定されていない限り、グリフの作成をサポートできません。 一般に、GetFontLanguageInfo |
|
文字列の長さが nMaxExtentと同じになるように、 |
|
調整されたエクステントと同様に、または代わりに、調整されたエクステントを使用して、文字列の長さを変更して、nMaxExtentで指定された値と等しくなるようにします。
lpDx 配列では、Kashida は負の理由インデックスで示されます。 GCP_KASHIDAは、フォント (および言語) が Kashidas をサポートしている場合にのみ、GCP_JUSTIFYと組み合わせて使用できます。 GetFontLanguageInfo Kashidas を使用して文字列を正当化すると、必要なグリフの数が入力文字列の文字数を超える可能性があります。 このため、Kashidas を使用する場合、アプリケーションでは、配列を入力文字列のサイズに設定するだけで十分であると想定できません。 (可能な最大値は約 dxPageWidth/dxAveCharWidth です。dxPageWidth はドキュメントの幅、dxAveCharWidth は GetTextMetrics 呼び出しから返される平均文字幅です)。 GetFontLanguageInfo |
|
文字がライゲートする場所であればどこでも結紮を使用します。 結紮は、1 つのグリフが 2 つ以上の文字に使用される場合に発生します。 たとえば、文字 a と e は ?に結び付けることができます。 ただし、これを使用するには、言語サポートとフォントの両方で必要なグリフをサポートする必要があります (この例は、既定では英語では処理されません)。
GetFontLanguageInfo を使用して、現在のフォントがライゲーションをサポートしているかどうかを判断します。 リゲートする文字数に特定の最大値が必要な場合は、lpGlyphs 配列の最初の要素に数値を設定します。 通常の結紮が必要な場合は、この値を 0 に設定します。 GCP_LIGATEが指定されていない場合、結紮は行われません。 詳細については、GCP_RESULTSを参照してください。 通常、文字セットにGCP_REORDER値が必要ですが、指定されていない場合、渡される文字列が既に視覚的な順序になっている場合 (つまり、getCharacterPlacement を 1 回の呼び出しで lpGcpResults- getFontLanguageInfo |
|
結果のエクステント (論理単位) が、nMaxExtent パラメーターで指定された値を超えていない限り、文字列のエクステントを計算します。 |
|
特定の言語のみ。 ニュートラルの通常の処理をオーバーライドし、文字列の読み取り順序に一致する強力な文字として扱います。 GCP_REORDER フラグでのみ便利です。 |
|
特定の言語のみ。 数値の通常の処理をオーバーライドし、文字列の読み取り順序に一致する強力な文字として扱います。 GCP_REORDER フラグでのみ便利です。 |
|
アラビア語/タイ語のみ。 数値には標準のラテン文字グリフを使用し、システムの既定値をオーバーライドします。 このオプションをフォントの言語で使用できるかどうかを判断するには、GetStringTypeEx |
|
アラビア語/タイ語のみ。 数値にはローカル グリフを使用し、システムの既定値をオーバーライドします。 このオプションをフォントの言語で使用できるかどうかを判断するには、GetStringTypeEx |
|
文字列の順序を変更します。 SBCS および左から右の読み取り順序ではない言語に使用します。 この値が指定されていない場合、文字列は既に表示順であると見なされます。
このフラグが半言語に設定され、lpClass 配列が使用されている場合、配列の最初の 2 つの要素を使用して、文字列の境界を超える読み取り順序を指定します。 GCP_CLASS_PREBOUNDRTLとGCP_CLASS_PREBOUNDLTRを使用して順序を設定できます。 事前設定された順序が不要な場合は、値を 0 に設定します。 GCPCLASSIN フラグが設定されている場合、これらの値を他の値と組み合わせることができます。 GCP_REORDER値が指定されていない場合、 GetFontLanguageInfo |
|
半言語のみ。 スワップ可能な文字がリセットされないことを指定します。 たとえば、右から左の文字列では、'(' と ')' は逆になりません。 |
|
幅配列を作成するときは、フォントでカーニング ペアを使用します (存在する場合)。 GetFontLanguageInfo GetFontLanguageInfo |
アプリケーションでは、GetFontLanguageInfo 関数を使用して、GCP_DIACRITIC、GCP_DBCS、GCP_USEKERNING、GCP_LIGATE、GCP_REORDER、GCP_GLYPHSHAPE、およびGCP_KASHIDAの値が現在選択されているフォントに対して有効かどうかを判断することをお勧めします。 無効な場合、GetCharacterPlacement は値を無視します。
GCP_NODIACRITICS値は定義されなくなり、使用しないでください。
戻り値
関数が成功した場合、戻り値は論理単位での文字列の幅と高さになります。 幅は下位ワードで、高さは高い単語です。
関数が失敗した場合、戻り値は 0 です。
備考
GetCharacterPlacement
GetCharacterPlacement を使用して文字間の間隔とインデックス配列を取得する必要はありません。理由付けまたはカーニングが必要な場合を除きます。 ラテン以外のフォントの場合、アプリケーションは、
GCP_RESULTS.lpGlyphs で返されるグリフ インデックスは、デバイス コンテキストの現在のフォントに固有であり、そのフォントが選択されたままデバイス コンテキストでテキストを描画するためにのみ使用する必要があることに注意してください。
理由を計算するときに、文字列の末尾の文字がスペースである場合、関数は文字列の長さを減らし、理由を計算する前にスペースを削除します。 配列がスペースのみで構成されている場合、関数はエラーを返します。
extTextOut
論理幅が入力文字列の先頭文字の幅より小さい場合、GCP_RESULTS.nMaxFit は無効な値を返します。 この場合は、グリフ インデックスと lpDX 配列 GetCharacterPlacement を呼び出します。 次に、lpDX 配列を使用して、各文字の事前幅を使用してエクステント計算を行います。ここで、nMaxFit は、グリフ インデックスの前の幅が先頭文字の幅より小さい文字の数です。
手記
wingdi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetCharacterPlacement を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | wingdi.h (Windows.h を含む) |
ライブラリ | Gdi32.lib |
DLL | Gdi32.dll |
関連項目
ExtTextOut を
GetCharABCWidths の
GetCharWidth32 の
GetFontLanguageInfo を
GetStringTypeEx の
GetTextExtentPoint32 の
GetTextMetrics を