指定領域(長方形)を除外する          <TOP>


ExcludeClipRect 既存のクリッピング領域から、指定された長方形の領域を取り除く
ExtFloodFill 現在選択されているブラシで一定の範囲内を塗りつぶす
CreateSolidBrush ソリッドカラーで論理ブラシを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject システムリソースを解放
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放

例では、指定した領域を除外し塗りつぶしを実行しています。

 

'================================================================
'= 指定領域を除外する
'=    (ExcludeClipRect.bas)
'================================================================
#include "Windows.bi"

' 既存のクリッピング領域から、指定された長方形の領域を取り除く
Declare Function Api_ExcludeClipRect& Lib "gdi32" Alias "ExcludeClipRect" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&)

' 現在選択されているブラシで一定の範囲内を塗りつぶす
Declare Function Api_ExtFloodFill& Lib "gdi32" Alias "ExtFloodFill" (ByVal hDC&, ByVal X&, ByVal Y&, ByVal crColor&, ByVal wFillType&)

' ソリッドカラーで論理ブラシを作成
Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&)

' 指定されたデバイスコンテキストのオブジェクトを選択
Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&)

' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる
Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

#define FLOODFILLBORDER 0               'crColorで指定した色が囲んでいる領域を、塗りつぶす
#define FLOODFILLSURFACE 1              'crColorで指定した色と同じ色になっている領域を、塗りつぶす

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hDC As Long
    Var hBrush As Long
    Var hOldBrush As Long
    Var Ret As Long

    hDC = Api_GetDC(GethWnd)
    hBrush = Api_CreateSolidBrush(RGB(239, 235, 222))
    hOldBrush = Api_SelectObject(hDC, hBrush)

    'クリッピング領域から除く
    Ret = Api_ExcludeClipRect(hDC, 30, 30, 120, 70)
    Ret = Api_ExtFloodFill(hDC, 1, 1, 0, FLOODFILLBORDER)

    Ret = Api_DeleteObject(hBrush)
    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

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