文字列を指定の矩形範囲内に出力          <TOP>


文字列を指定した矩形範囲に出力します。TextOutは文字列の描画位置のみの指定でした。

WindowFromPoint 指定の座標位置にあるウィンドウハンドルを取得  

GetCursorPos マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得

ExtTextOut 指定の矩形の範囲内でテキストを表示

GetWindowRect ウィンドウの座標をスクリーン座標系で取得

GetTextExtentPoint32 文字列全体の幅と高さを取得

 

指定した矩形範囲(ウィンドウ)に文字列を出力します。

 

 

'================================================================
'= 文字列を指定の矩形範囲内に出力
'=    (GetTextExtentPoint32.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    X As Long
    Y As Long
End Type

Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

' 指定の座標位置にあるウィンドウハンドルを取得
Declare Function Api_WindowFromPoint& Lib "user32" Alias "WindowFromPoint" (ByVal xPoint&, ByVal yPoint&)

' マウスカーソル( マウスポインタ)の現在の位置に相当するスクリーン座標を取得
Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI)

' 指定の矩形の範囲内でテキストを表示
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 Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT)

' 文字列全体の幅と高さを取得
Declare Function Api_GetTextExtentPoint32& Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hDC&, ByVal lpsz$, ByVal cbString&, lpSize As POINTAPI)

' ウィンドウ全体のデバイスコンテキストを取得
Declare Function Api_GetWindowDC& Lib "user32" Alias "GetWindowDC" (ByVal hWnd&)

'================================================================
'=
'================================================================
Declare Sub MainForm_MouseUp edecl (ByVal Button As Integer, ByVal Shift As Integer, ByVal SX As Single, ByVal SY As Single)
Sub MainForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal SX As Single, ByVal SY As Single)
    Var pt As POINTAPI
    Var mWnd As Long
    Var rc As RECT
    Var nDC As Long
    Var TextSize As POINTAPI
    Var CX As Long
    Var CY As Long
    Var txt As String
    Var Ret As Long

    txt = "ExtTextOut "

    'カーソル位置取得
    Ret = Api_GetCursorPos(pt)

    'カーソル下のウィンドウ位置取得
    mWnd = Api_WindowFromPoint(pt.X, pt.Y)

    'ウィンドウの矩形を取得
    Ret = Api_GetWindowRect(mWnd, rc)

    'ウィンドウのデバイスコンテキスト取得
    nDC = Api_GetWindowDC(mWnd)

    'テキストのサイズを取得
    Ret = Api_GetTextExtentPoint32(nDC, txt, Len(txt), TextSize)

    For CX = 1 To rc.Right - rc.Left Step TextSize.X
        For CY = 1 To rc.Bottom - rc.Top Step TextSize.Y

            'テキストをウィンドウに描画
            Ret = Api_ExtTextOut(nDC, CX, CY, 0, ByVal 0, txt, Len(txt), ByVal 0)
        Next
    Next
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Symbol(20, 40),"フォームをクリックしてください!", 1, 1
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End