Funktionreferenz


_GDIPlus_FontGetHeight


Gets the line spacing of a font in the current unit of a specified Graphics object

#include <GDIPlus.au3>
_GDIPlus_FontGetHeight ( $hFont, $hGraphics )

Parameter

$hFont Pointer to a Font object
$hGraphics Pointer to a Graphics object

Rückgabewert

Success: the line spacing of this font.
Failure: 0 and sets the @error flag to non-zero, @extended may contain GPSTATUS error code ($GPIP_ERR* see GPIPlusConstants.au3).

Bemerkungen

The line spacing is the vertical distance between the base lines of two consecutive lines of text.
Thus, the line spacing includes the blank space between lines along with the height of the character itself.

Siehe auch

Suche nach GdipGetFontHeight in der MSDN Bibliothek.

Beispiel

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Example()

Func Example()
    ; Erstellt die GUI
    Local $hGui = GUICreate("GDI+", 800, 340)
    GUISetState(@SW_SHOW)

    _GDIPlus_Startup()
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

    Local $hPen = _GDIPlus_PenCreate(0xFF0000FF)
    Local $hBrush = _GDIPlus_BrushCreateSolid(0xFFFF0000)

    Local $hFormat = _GDIPlus_StringFormatCreate()
    Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    Local $hFont = _GDIPlus_FontCreate($hFamily, 96, 0)

    Local $sString = ChrW(0x1EF2) & ChrW(0x1EF3)

    Local $iPosX = 50
    Local $iPosY = 50
    Local $aStrDim = _MeasureString($hGraphic, $sString, $hFont, $hFormat, $hFamily)

    _GDIPlus_GraphicsDrawString($hGraphic, "MeasureString", $iPosX, $iPosY - 30)
    _GDIPlus_GraphicsDrawLine($hGraphic, $iPosX, $iPosY - 5, $iPosX, $iPosY + 5, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, $iPosX - 5, $iPosY, $iPosX + 5, $iPosY, $hPen)
    Local $tLayout = _GDIPlus_RectFCreate($iPosX, $iPosY, $aStrDim[4], $aStrDim[5])
    _GDIPlus_GraphicsDrawRect($hGraphic, $iPosX, $iPosY, $aStrDim[4], $aStrDim[5], $hPen)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)

    $iPosX = 300
    _GDIPlus_GraphicsDrawString($hGraphic, "MeasureCharacterRanges", $iPosX, $iPosY - 30)
    _GDIPlus_GraphicsDrawLine($hGraphic, $iPosX, $iPosY - 5, $iPosX, $iPosY + 5, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, $iPosX - 5, $iPosY, $iPosX + 5, $iPosY, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphic, $iPosX + $aStrDim[0], $iPosY + $aStrDim[1], $aStrDim[2], $aStrDim[3], $hPen)
    DllStructSetData($tLayout, "X", $iPosX)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)

    $iPosX = 550
    _GDIPlus_GraphicsDrawString($hGraphic, "CellAscent / CellDescent", $iPosX, $iPosY - 30)
    _GDIPlus_GraphicsDrawLine($hGraphic, $iPosX, $iPosY - 5, $iPosX, $iPosY + 5, $hPen)
    _GDIPlus_GraphicsDrawLine($hGraphic, $iPosX - 5, $iPosY, $iPosX + 5, $iPosY, $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphic, $iPosX + $aStrDim[0], $iPosY + $aStrDim[1], $aStrDim[2], $aStrDim[7], $hPen)
    _GDIPlus_GraphicsDrawRect($hGraphic, $iPosX + $aStrDim[0], $iPosY + $aStrDim[1] + $aStrDim[7], $aStrDim[2], $aStrDim[8], $hPen)
    DllStructSetData($tLayout, "X", $iPosX)
    _GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $tLayout, $hFormat, $hBrush)

    $sString = "fontsize goes crazy"
    $iPosX = 50
    $iPosY = 300

    Local $sChar
    For $i = 0 To StringLen($sString)

        $sChar = StringLeft($sString, 1)
        $sString = StringTrimLeft($sString, 1)

        If $sChar = " " Then
            $aStrDim = _MeasureString($hGraphic, "_", $hFont, $hFormat, $hFamily)
            $iPosX += $aStrDim[2]
            ContinueLoop
        EndIf

        _GDIPlus_FontDispose($hFont)
        $hFont = _GDIPlus_FontCreate($hFamily, Random(12, 48), 0)
        $aStrDim = _MeasureString($hGraphic, $sChar, $hFont, $hFormat, $hFamily)

        $tLayout = _GDIPlus_RectFCreate($iPosX - $aStrDim[0], $iPosY - $aStrDim[1] - $aStrDim[7], $aStrDim[4], $aStrDim[5])
        _GDIPlus_GraphicsDrawStringEx($hGraphic, $sChar, $hFont, $tLayout, $hFormat, $hBrush)

        $iPosX += $aStrDim[2]
    Next

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst.
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    ; Gibt die Ressourcen frei
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
EndFunc   ;==>Example

Func _MeasureString($hGraphics, $sString, $hFont, $hFormat, $hFamily, $iStyle = 0)
    Local $tLayout = _GDIPlus_RectFCreate()
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)

    Local $aRanges[2][2] = [[1]]
    $aRanges[1][1] = StringLen($sString)
    _GDIPlus_StringFormatSetMeasurableCharacterRanges($hFormat, $aRanges)
    Local $aRegion = _GDIPlus_GraphicsMeasureCharacterRanges($hGraphics, $sString, $hFont, $aInfo[0], $hFormat)
    Local $aBounds = _GDIPlus_RegionGetBounds($aRegion[1], $hGraphics)
    _GDIPlus_RegionDispose($aRegion[1])

    Local $iFontHeight = _GDIPlus_FontGetHeight($hFont, $hGraphics)
    Local $iLineSpacing = _GDIPlus_FontFamilyGetLineSpacing($hFamily, $iStyle)
    Local $iAscent = $iFontHeight / $iLineSpacing * _GDIPlus_FontFamilyGetCellAscent($hFamily, $iStyle)
    Local $iDescent = $iFontHeight / $iLineSpacing * _GDIPlus_FontFamilyGetCellDescent($hFamily, $iStyle)

    Local $aDim[9]
    $aDim[0] = $aBounds[0]
    $aDim[1] = $aBounds[1]
    $aDim[2] = $aBounds[2]
    $aDim[3] = $aBounds[3]
    $aDim[4] = DllStructGetData($aInfo[0], "Width")
    $aDim[5] = DllStructGetData($aInfo[0], "Height")
    $aDim[6] = $iFontHeight
    $aDim[7] = $iAscent
    $aDim[8] = $iDescent

    Return $aDim
EndFunc   ;==>_MeasureString