<Return[G]><Top>

GetDialogBaseUnits

Declare Function Api_GetDialogBaseUnits& Lib "user32" Alias "GetDialogBaseUnits" ( )

Declare Function GetDialogBaseUnits Lib "user32.dll" ( ) As Long

ダイアログベース単位を取得する。ダイアログベース単位とは、システムフォントとして使われている各文字の幅と高さの各平均値のことである。システムフォントを使うダイアログボックスでは、これらの値を使って、ダイアログボックステンプレートで指定されているダイアログテンプレート単位と、ピクセル数との相互変換を行える。システムフォントを使わないダイアログボックスでは、ダイアログテンプレート単位からピクセル数への変換方法は、ダイアログボックスで使われているフォントによって異なる。

どちらのタイプのダイアログボックスでも、MapDialogRect 関数を使って変換を行う方が簡単である。MapDialogRect はフォントを考慮に入れ、ダイアログテンプレート単位の長方形からピクセルへの変換を正確に行う

パラメータ
    パラメータはなし。

戻り値
    ダイアログベース単位が格納された 32 ビット値が返る。上位ワード(high-order word)は垂直ダイアログベース単位を、下位ワード

    (low-order word)は水平ダイアログベース単位を保持する。

解説
    GetDialogBaseUnits が返す水平ベース単位は、システムフォントの平均文字幅を表すピクセル数に相当する。

    垂直ベース単位は、システムフォントの高さを表すピクセル数に相当する。
    システムフォントを使わないダイアログボックスでは、ベース単位は、そのダイアログで使われているフォントの各文字の幅と高さの各平均値

    を表すピクセル数に相当する。 各関数を使って、特定のフォントに関するこれらの値を計算でる。

    ただし、自分で計算した結果と、システムが計算した結果が異なる可能性がありますが、MapDialogRect 関数を使うと、そのような違いに

    起因するエラーを回避できる。
    水平ベース単位は、水平ダイアログテンプレート単位の 4 倍である。垂直ベース単位は、垂直ダイアログテンプレート単位の 8 倍である。

    そのため、次の式を使って、ダイアログテンプレート単位をピクセル数へ変換できる。
    pixelX = MulDiv( templateunitX, baseunitX, 4 )
    pixelY = MulDiv( templateunitY, baseunitY, 8 )
    同様に、次の式を使って、ピクセル数からダイアログテンプレート単位への変換ができる。
    templateunitX = MulDiv( pixelX, 4, baseunitX )
    templateunitY = MulDiv( pixelY, 8, baseunitY )