<Return[D]><Top>

DrawText

Declare Function Api_DrawText& Lib "user32" Alias "DrawTextA" (ByVal hDC&, ByVal lpStr$, ByVal nCount&, lpRect As RECT, ByVal wFormat&)

Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

指定された長方形領域に合わせて整形したテキストを描画する。テキストは、指定された形式(タブの展開、文字の位置合わせ、行の折り返しなど)に従って整形される。

DrawTextEx 関数を使うと、この関数では指定できないその他の形式も指定できる。

パラメータ
hDC
    デバイスコンテキストのハンドルを指定する。
lpString
    描画する文字列へのポインタを指定する。

    nCount パラメータに -1 を指定する場合は、このパラメータに指定する文字列は NULL で終わっていなければならない。
    uFormat パラメータで DT_MODIFYSTRING を指定した場合、DrawText 関数によって、この文字列に最大で 4 文字が追加される場合

    がある。文字列を格納するバッファには、この追加文字も格納できるだけのサイズの余裕を持たせておかなければなならない。
nCount
    文字列の文字数を指定する。このパラメータに -1 を指定すると、lpString パラメータは NULL で終わる文字列へのポインタであると見なさ

    れる。この場合、文字列の長さは自動的に計算される。
    Windows 95/98:描画する文字数が 8192 文字を超えることはできない。
lpRect
    長方形領域の論理座標が入った RECT 構造体へのポインタを指定する。

    テキストは、この長方形領域内で整形される(uFormat パラメータで DT_NOCLIP を指定した場合を除く)。
uFormat
    テキストを整形する方法を指定する。次の値を組み合わせて指定できる。

    値                                         

説明                                                                                                                        

    DT_BOTTOM

長方形領域の下端にテキストを揃えます。DT_SINGLELINE と同時に指定しなければならない。

    DT_CALCRECT

指定されたテキストを表示するために必要な長方形領域の幅と高さを調べる。

複数行テキストの場合は、lpRect パラメータで指定された長方形領域の幅を使い、長方形領域の下端を

テキストの最終行の下側の境界線にまで広げます。テキストを 1 行で表示する場合は、長方形領域の右

端を行の最後の文字の右側の境界線に合うように変更する。どちらの場合も、DrawText 関数は、テキ

ストの描画は行わず、整形されたテキストの高さを返する。

    DT_CENTER

テキストを長方形領域内で横方向に中央揃えで表示する。

    DT_EDITCONTROL

複数行エディットコントロールがもつ特性と同じ特性で描画する。特に、平均文字幅がエディットコントロール

と同じ方法で計算され、部分的に見えている最後の行は表示れれない。

    DT_END_ELLIPSIS

文字列の最後の部分が長方形領域に納まり切らない場合、はみ出す部分が切り取られ、末尾に省略符

号(...)が追加される。文字列の最後ではない場所にある単語が長方形領域からはみ出す場合は、省

略記号なしで切り取られます。

    DT_MODIFYSTRING

フラグがセットされていない限り、文字列が変更されることはない。

    DT_EXPANDTABS

タブ文字を展開する。既定のタブ間隔は 8 文字である。このフラグをセットする場合、

DT_WORD_ELLIPSIS、DT_PATH_ELLIPSIS、および DT_END_ELLIPSIS は指定できない。

    DT_EXTERNALLEADING

行の高さに、外部レディングの高さ(テキストの行間として適切な高さ)を加算する。通常、外部レディン

グはテキスト行の高さに加えられない。

    DT_HIDEPREFIX

Windows 2000:テキストに埋め込まれているプレフィックスとしてのアンパサンド(&)を無視する。後ろに

続く文字に下線が施されなくなる。

ただし、その他のニーモニックプレフィックス文字は、通常どおり処理される。次に例を示す。

入力文字列

"A&bc&&d"

通常

"Abc&d"

DT_HIDEPREFIX

"Abc&d"

    DT_INTERNAL

テキストの表示サイズを計算する際にシステムフォントを使用する。

    DT_LEFT 

テキストを左揃えにする。

    DT_MODIFYSTRING

lpString パラメータが指すバッファに、実際に表示された文字列を格納する。

DT_END_ELLIPSIS フラグまたは DT_PATH_ELLIPSIS フラグを指定したときにしか意味を持たない。

    DT_NOCLIP

クリッピングをしない。描画が多少速くなる。

    DT_NOFULLWIDTHCHARBREAK

Windows 98、Windows 2000:行が DBCS(ダブルバイト文字セットの文字列)で改行される

のを防ぎます。このため、改行規則は SBCS 文字列と同じになる。たとえば、韓国語版 Windows で使

用すると、アイコンラベルの表示の信頼性が上がります。DT_WORDBREAK フラグを指定していなけれ

ば、この値は意味を持たない。

    DT_NOPREFIX

プリフィックス文字の処理を行わないようにする。通常は、ニーモニックプレフィクス文字の「&」は、その次

にくる文字に下線(_)を付けて表示せよとの命令であると解釈され、ニーモニックプレフィックス文字の

「&&」は、1 つの「&」を表示せよとの命令であると解釈される。DT_NOPREFIX を指定すると、この

処理が行われなくなる。次に例を示す。

入力文字列

"A&bc&&d"

通常

"Abc&d"

DT_NOPREFIX

"A&bc&&d"

    DT_PATH_ELLIPSIS

指定した長方形領域に収まるように、必要に応じてテキストの途中を省略符号 (...) に置き換える。

円記号(\)が含まれているテキストの場合、最後の円記号の後ろのテキストが可能な限り保持される。

    DT_MODIFYSTRING

フラグを指定していない限り、文字列が変更されることはない。

    DT_PREFIXONLY

Windows 2000:アンパサンドプレフィックス文字(&)の後ろの文字がくる位置の下線だけを描画する。

文字列内のその他の文字は一切描画しない。次に例を示す。

input string

"A&bc&&d"

normal

"Abc&d"

DT_PREFIXONLY

" _ "

    DT_RIGHT

テキストを右揃えにする。

    DT_RTLREADING

hdc パラメータで指定したデバイスコンテキストで選択されているフォントがヘブライ語かアラビア語だった場合

に、双方向テキストを右から左への読み取り順序で表示する。既定の読み取り順序は、どのテキストでも

左から右である。

    DT_SINGLELINE

テキストを単一行で表示する。たとえ、テキストがキャリッジリターンやラインフィードを含んでいても、改行さ

れない。

    DT_TABSTOP

タブ間隔を設定する。この値を指定したときは、uFormat パラメータの 15 ビットから 8 ビット(下位ワードの

上位バイト)で、タブ間隔の文字数を指定する。既定のタブ間隔は 8 文字である。この値を指定した場

合、DT_CALCRECT、DT_EXTERNALLEADING、DT_INTERNAL、DT_NOCLIP、および

DT_NOPREFIX は指定できない。

    DT_TOP

長方形領域の上端にテキストを揃える(単一行のときのみ)。

    DT_VCENTER

テキストを縦方向に中央揃えで表示する。

この値は、DT_SINGLELINE を指定した場合にしか使用できない。

    DT_WORDBREAK

テキストを複数行で表示する。

折り返しは、lpRect パラメータで指定した長方形領域の端から単語がはみ出す部分で自動的に行われ

る。キャリッジリターンとラインフィードの組み合わせによっても折り返される。

    DT_WORD_ELLIPSIS

長方形領域内に納まらない部分がある場合、それを切り取ったうえで、必ず省略記号(...)を追加す

る。


戻り値
    関数が終了すると、描画したテキストの高さが返る。

    DT_VCENTER または DT_BOTTOM を指定した場合は、lpRect->top から描画したテキストの下端までのオフセットが返る。
    関数が失敗すると、0 が返る。
    Windows NT/2000:拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    テキストは、デバイスコンテキストで選択されているフォント、色、背景色で描画される。

    DT_NOCLIP を指定しない限り、テキストの指定した長方形領域からはみ出した部分は切り取られ、画面に表示れれない。

    DT_SINGLELINE を指定しない限りは、すべての整形が、行が複数あるものと見なして実行される。
    選択されているフォントが指定した長方形領域に対して大きすぎる場合でも、小さい代替フォントが代用されることはない。
    DrawText 関数では、文字送り方向の角度も文字の向きの角度も 0 に設定されているフォントしかサポートされていない。
    デバイスコンテキストのテキスト位置揃えモードで、TA_LEFT、TA_TOP、および TA_NOUPDATECP が設定されていなければならない