指定した矩形領域を無効領域に          <TOP>


指定した領域に文字を描画し、指定時間経過後その領域を無効化し終了します。

CreateDC 指定されたデバイスのデバイスコンテキストを、指定された名前で作成
DeleteDC 指定されたデバイスコンテキストを削除
DrawText 文字列を指定領域に出力
SetTextColor デバイスコンテキストの文字色を変更
WindowFromDC デバイスコンテキストからウィンドウハンドルを取得
InvalidateRect クライアント領域の一部を無効領域に
SetBkMode バックグラウンドの塗りつぶしモード設定
TRANSPARENT(1) 背景色を設定しない
 

指定領域(80,56)-(250,76)に「北海道札幌市白石区」という文字列を描画し、10までカウント後その領域を無効化し終了します。

 

 

'================================================================
'= 指定した矩形領域を無効領域に
'=    (InvalidateRect.bas)
'================================================================
#include "Windows.bi"

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

' 指定されたデバイスのデバイスコンテキストを、指定された名前で作成
Declare Function Api_CreateDC& Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName$, lpDeviceName As Any, lpOutput As Any, ByVal lpInitData As Any)

' 指定されたデバイスコンテキストを削除
Declare Function Api_DeleteDC& Lib "gdi32" Alias "DeleteDC" (ByVal hDC&)

' 文字列を指定領域に出力
Declare Function Api_DrawText& Lib "user32" Alias "DrawTextA" (ByVal hDC&, ByVal lpStr$, ByVal nCount&, lpRect As RECT, ByVal wFormat&)

' デバイスコンテキストの文字色を変更
Declare Function Api_SetTextColor& Lib "gdi32" Alias "SetTextColor" (ByVal hDC&, ByVal crColor&)

' デバイスコンテキストからウィンドウハンドルを取得
Declare Function Api_WindowFromDC& Lib "user32" Alias "WindowFromDC" (ByVal dDC&)

' クライアント領域の一部を無効領域に
Declare Function Api_InvalidateRect& Lib "user32" Alias "InvalidateRect" (ByVal hWnd&, lpRect As RECT, ByVal bErase&)

' バックグラウンドの塗りつぶしモード設定
Declare Function Api_SetBkMode& Lib "gdi32" Alias "SetBkMode" (ByVal hDC&, ByVal iBkMode&)

#define TRANSPARENT 1                   '背景色を設定しない

Var Shared Timer1 As Object
Var Shared Button1 As Object
Var Shared Text(2) As Object
Var Shared Edit(2) As Object

Timer1.Attach GetDlgItem("Timer1")
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
For i = 0 To 2
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
    Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14
Next

Var Shared count As Integer
Var Shared hWnd As Long
Var Shared rct As RECT

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Timer1.SetInterval 50
    Timer1.Enable 0
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var hDC As Long
    Var txt As String
    Var Red As Byte
    Var Green As Byte
    Var Blue As Byte
    Var col As Long
    Var Ret As Long

    txt = "北海道札幌市白石区"

    'テキストを描画する矩形を設定
    rct.Left = 80
    rct.Top = 56
    rct.Right = 250    
    rct.Bottom = 76

    'テキストカラーの数値を取得
    Red = Val(Edit(0).GetWindowText)
    Green = Val(Edit(1).GetWindowText)
    Blue = Val(Edit(2).GetWindowText)

    'デスクトップのデバイスコンテキストを取得
    hDC = Api_CreateDC("Display", ByVal 0, ByVal 0, ByVal 0)

    'ウィンドウハンドルを取得
    hWnd = Api_WindowFromDC(hDC)

    'テキストのカラーを設定
    Ret = Api_SetTextColor(hDC, RGB(Red, Green, Blue))

    '背景色を透過
    Ret = Api_SetBkMode(hDC, TRANSPARENT)

    'テキストを描画
    Ret = Api_DrawText(hDC, txt, Len(txt), rct, 0)

    'カウント開始
    count = count + 1
    SetWindowText "InvalidateRect  " & Str$(count)

    'カウント10を経過した場合
    If count = 10 Then
        '矩形領域内のテキストを消去
        Ret = Api_InvalidateRect(hWnd, rct, 0)
        Ret = Api_DeleteDC(hDC)
        SetWindowText "InvalidateRect"
        Timer1.Enable 0
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Timer1.Enable -1
    count = 0
End Sub

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

    Ret = Api_InvalidateRect(hWnd, rct, 0)
    Ret = Api_DeleteDC(hDC)
End Sub

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