領域の塗り潰しのテスト(V)          <TOP>


指定領域内を塗り潰すテスト

FloodFill 塗り潰しの指定(Win32アプリケーションでは、ExtFloodFill関数を使う)

CreateSolidBrush 塗り潰し指定

CreateHatchBrush ハッチ指定

SelectObject グラフィックオブジェクトをデバイスコンテキストと関連付ける

DeleteObject オブジェクトの削除

GetDC フォームのデバイスコンテキスト取得

ReleaseDC フォームのデバイスコンテキスト解放

 

 

'================================================================
'= 領域の塗り潰し
'=    (FloodFill.bas)
'=    ExtFloodFill.bas参照
'================================================================
#include "Windows.bi"

#define FLOODFILLBORDER 0               '塗りつぶし領域がcrColorで指定された色に囲まれている範囲
#define FLOODFILLSURFACE 1              'crColorで指定された色の領域(指定色がある限り塗りつぶし)

' 画面の領域を現在のブラシで塗りつぶ(Win32 アプリケーションでは、ExtFloodFill 関数を使う)
Declare Function Api_FloodFill& Lib "gdi32" Alias "FloodFill" (ByVal hDC&, ByVal x&, ByVal y&, ByVal crColor&)

' ソリッドカラーで論理ブラシを作成
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_Ellipse& Lib "gdi32" Alias "Ellipse" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&)

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

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

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Circle(120, 104), 90, 0
    Line(0, GetHeight - 31)-(GetWidth - 7, 0),, 0
    Line(0, 0)-(GetWidth - 7, GetHeight - 31),, 0
End Sub

'================================================================
'= 塗り潰し
'================================================================
Declare Sub MainForm_MouseDown edecl (ByVal Button%, ByVal Shift%, ByVal SX!, ByVal SY!)
Sub MainForm_MouseDown(ByVal Button%, ByVal Shift%, ByVal SX!, ByVal SY!)
    Var hDC As Long
    Var hBr As Long
    Var rgbColor As Long
 Var Ret As Long

    Randomize(Time)

    rgbColor = RGB(Rnd(1) * 255, Rnd(1) * 255, Rnd(1) * 255)

 hDC = Api_GetDC(GethWnd)

    hBr = Api_CreateSolidBrush(rgbColor)

    Ret = Api_SelectObject(hDC, hBr)
 Ret = Api_FloodFill(hDC, SX!, SY!, FLOODFILLBORDER)

    'ブラシの解放
    Ret = Api_DeleteObject(hBr)

    'デバイスコンテキストの解放
    Ret = Api_ReleaseDC(hBr, hDC)
End Sub

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