文字列を指定の位置に出力          <TOP>


スクリーン座標、フォーム内の指定位置に文字列を描画します。

GetActiveWindow アクティブウィンドウのハンドル取得

GetWindowDC  ウィンドウ全体のデバイスコンテキストのハンドルを取得

Ellipse 楕円の描画

TextOut 文字列を指定の位置に出力

GetCursorPos マウスカーソルの座標を取得

 

フォームにタイマーを2個、コマンドボタンを1個貼り付けます。直径5ピクセルの円をカーソル移動位置に描画しています。

 

フォームの内(MainForm)外(スクリーン)に描画している

『テキスト描画』ボタンクリックでスクリーン座標にテキストを描画しています。

 

'================================================================
'= 文字列を指定の位置に出力
'=    (TextOut2.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    x As Long
    y As Long
End Type

' アクティブウィンドウのハンドル取得
Declare Function Api_GetActiveWindow& Lib "user32" Alias "GetActiveWindow" ()

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

' 楕円の描画
Declare Function Api_Ellipse& Lib "gdi32" Alias "Ellipse" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&)

' 文字列を指定の位置に出力
Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal x&, ByVal y&, ByVal lpString$, ByVal nCount&)

' マウスカーソルの座標を取得
Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI)

Var Shared Timer1 As Object
Var Shared Timer2 As Object

Timer1.Attach GetDlgItem("Timer1")
Timer2.Attach GetDlgItem("Timer2")

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Timer1.SetInterval 10
    Timer1.Enable -1

    Timer2.SetInterval 10
    Timer2.Enable -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var i As Integer
    Var Str As String
    Var Ret As Long

    Str = "スクリーンにテキストを描画!"

    For i = 0 To 30
        'スクリーンにテキストを描画
        Ret = Api_TextOut(Api_GetWindowDC(0), i * 20, i * 20, Str, Len(Str))
    Next i
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var pa As POINTAPI
    Var Ret As Long

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

    'スクリーンDCに楕円(円)を描画
    Ret = Api_Ellipse(Api_GetWindowDC(0), pa.x - 5, pa.y - 5, pa.x + 5, pa.y + 5)
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer2_Timer edecl ()
Sub Timer2_Timer()
    Var Ret As Long

    'テキストをアクティブウインドウに描画
    Ret = Api_TextOut(Api_GetWindowDC(Api_GetActiveWindow), 50, 50, "ここはMainFormです!", 20)
End Sub

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