多角形塗りつぶし

<戻る

ここに載せてあるソースコードは、参考のために載せてあります

サンプルコードは、一番下にLZHとしてあります




Option Explicit
'リージョンをブラシで塗りつぶし
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long

'色ブラシの作成
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

'オブジェクトの削除
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

'多角形リージョンの作成
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long

'POINTAPI構造体
Private Type POINTAPI
        X As Long
        Y As Long
End Type

Dim Plg() As POINTAPI, plgCount As Integer

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'MouseMoveを呼び出す
    Picture1_MouseMove Button, Shift, X, Y
    
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    If Button <> 1 Then Exit Sub 'Buttonが1以外なら入っちゃダメ
    
    Dim BHnd As Long, Rgn
    ReDim Preserve Plg(plgCount) '変動配列の添え字を変える
    
    '現在の位置を保存
    Plg(plgCount).X = X
    Plg(plgCount).Y = Y

    BHnd = CreateSolidBrush(vbBlue) '色ブラシを作成
    
    Rgn = CreatePolygonRgn(Plg(0), plgCount, 1) '多角形のリージョンを作成
    
    Call FillRgn(Picture1.hdc, Rgn, BHnd) 'リージョンを塗りつぶし
    
    Call DeleteObject(BHnd) '色ブラシを削除
    Call DeleteObject(Rgn) 'リージョンを削除
    Picture1.Refresh '表示
    plgCount = plgCount + 1 '配列の最大添え字数を増やす
End Sub




<戻る

Sample08.lzh


http://www.vector.co.jp/authors/VA015521/