文字列を指定の位置に出力 <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