<Return[E]><Top>

ExtTextOut

Declare Function Api_ExtTextOut& Lib "gdi32" Alias "ExtTextOutA" (ByVal hDC&, ByVal X&, ByVal Y&, ByVal wOptions&, ByVal lpRect As Any, ByVal lpString$, ByVal nCount&, lpDx&)

Declare Function ExtTextOut Lib "gdi32" Alias "ExtTextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal wOptions As Long, lpRect As Rect, ByVal lpString As String, ByVal nCount As Long, lpDx As Long) As Long

現在選択されているフォント、背景色、および文字の色を使ってテキストを描画する。必要に応じて、クリッピングしたり不透明にするための長方形領域を指定することもできる。

パラメータ
hdc
    デバイスコンテキストのハンドルを指定する。
X
    文字列の先頭文字の論理 x 座標を指定する。
Y
    文字列の先頭文字の論理 y 座標を指定する。
fuOptions
    アプリケーション定義の長方形領域の使い方を指定する。次の値を組み合わせて指定できる。

    値                                   

意味                                                                                                                                  

    ETO_CLIPPED

テキストが長方形領域で切り取られる。

    ETO_GLYPH_INDEX

lpString パラメータは GetCharacterPlacement 関数の戻り値であり、これ以上言語固有の処理は必要ない

ため、GDI により直接解析される。

グリフのインデックスは TruType フォントにしか適用されませんが、このフラグは、ビットマップフォントおよびベク

タフォントにも使用でき、これ以上言語上の処理は必要なく、GDI が直接文字列を処理すべきであることを示

す。文字列がラスタフォント用の 8 ビットの配列であると見なせる場合でも、グリフインデックス値はすべて 16

 ビット値となるので注意すること。ExtTextOutW 関数では、グリフインデックスはメタファイルに保存されるが、

文字を正しく表示するには、メタファイルを同じフォントを使って再生しなければならない。

ExtTextOutA 関数では、グリフインデックスは保存されない。

    ETO_NUMERICSLATIN

数値の表示にヨーロッパ数字を使用する。

    ETO_NUMERICSLOCAL

数値の表示にロケールに適切な数字を使用する。

    ETO_OPAQUE

lpDx パラメータに指定した配列にペアになった値を格納する場合に指定する。

    ETO_PDY

lpDx パラメータに指定した配列にペアになった値を格納する場合に指定する。

各ペアの 1 つ目の値は、通常どおり、隣接する文字セルの原点間の距離である。

2 つ目の値は、フォントの縦方向に沿った距離として使われる。

    ETO_RTLREADING

中東版 Windows:指定したデバイスコンテキストでヘブライフォントまたはアラビアフォントが選択されている場

合にこの値を指定すると、文字列は右から左への読み取り順序で出力されるようになる。

この値を指定しなかった場合、文字列は左から右へ出力される。

SetTextAlign 関数で TA_RTLREADING を指定することでも同じ効果が得られる。

この値は、下位互換性のために残されているものである。

ETO_GLYPH_INDEX と ETO_RTLREADING は同時には指定できない。

ETO_GLYPH_INDEX を指定すると、すべての言語処理が完了していると見なされるため、この 2 つを同時

に指定した場合、ETO_RTLREADING フラグは無視される。

lprc
    クリッピングか背景処理もしくはその両方の処理に使用する長方形領域の入った RECT 構造体へのポインタを指定する。

    このパラメータは省略可能。
lpString
    描画する文字列へのポインタを指定する。文字列の長さは cbCount パラメータで決まるため、この文字列はゼロ文字 ('\0') で終わっている

    必要はない。
cbCount
    文字列に格納されている文字の数を指定する。
    Windows 95/98:8192 より大きい値は指定できない。
lpDx
    隣接する文字セルの原点間の距離が入った配列へのポインタを指定する。

    たとえば、lpDx[i] の値は、i 番目の文字セルの原点と i+1 番目の文字セルの原点の距離を論理単位で示す。

    このパラメータは省略可能。

 
戻り値
    関数が成功して文字列が描画されると、0 以外の値が返る。

    ただし、ANSI 版の ExtTextOut 関数を ETO_GLYPH_INDEX を指定して呼び出した場合は、関数が何も行わなくても 0 以外の値

   (True)が返る。
    関数が失敗すると、0 が返る。
    Windows NT/2000:拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    この関数は、例外的に Windows 95/98 でも Unicode 版と ANSI 版がサポートされている。
    指定したデバイスコンテキストの現在のテキストの配置設定により、テキストを配置する際の基準点の使い方が決まる。

    テキストの配置設定は、GetTextAlign 関数を呼び出すことにより取得できる。

    テキストの配置設定を変更するには、SetTextAlign 関数を呼び出す。
    ipDx パラメータに NULL を指定すると、ExtTexOut 関数は既定の文字間隔を使う。

    文字セルの原点と lpDx パラメータで指定した配列に格納する値は、論理単位で指定する。

    文字セルの原点とは、文字セルの左上の隅である。既定では、この関数がカレントポジションを使用し、更新することはない。

    ExtTextOut 関数を呼び出したときにカレントポジションが更新されるようにするには、対象となるデバイスコンテキストを指定し、

    nMode パラメータに TA_UPDATECP をセットして SetTextAlign 関数を呼び出す。このフラグをセットすると、

    以降の ExtTextOut 関数では X パラメータと Y パラメータは無視されるようになる。
    ANSI 版の ExtTextOut 関数では、lpDx パラメータに指定した配列には、lpString パラメータに指定した文字列のバイト数と

    同じ数だけの INT 値を格納しておく。

    DBCS 文字については、lpDx パラメータに指定する配列内の dx を先頭バイトと末尾バイトに分けることができる。

    2 つのバイトの合計が目的の dx になってさえいれば、どのような分け方でもかまわない。

    Unicode 版の ExtTextOut 関数での DBCS 文字については、各 Unicode グリフが 1 つの pdx エントリを受け取る。
    GetTextExtentExPoint 関数で得た alpDx 値は、ExtTextOut 関数に指定する lpDx 値と同じではないので注意すること。

    alpDx 値を lpDx パラメータに使う場合には、まず適切な処理を施さなければならない。