文字列を指定の矩形範囲内に出力 <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