投稿者 yamada  (社会人) 投稿日時 2010/7/29 14:52:35

こんにちは。趣味でプログラムを楽しんでいます。
早速質問です。
Windowsのペイントの塗りつぶしのように、閉じた図形の内部を塗りつぶしたいと思います。
いろいろと調べた結果、VB6でならExtFloodFill を使って可能であることを見つけましたが、これはVB2008では使用できますか?
塗りつぶしの色の指定がわかりません。

実際にはコッホ島の内部を塗りつぶしたいのですが、問題を単純にするためにフォームに四角を描いて塗りつぶしを試しています。
Public Class Form1

    Declare Function ExtFloodFill Lib "gdi32" Alias "ExtFloodFill" (ByVal hdc As LongByVal x As Long, _
        ByVal y As LongByVal crColor As LongByVal wFillType As LongAs Long

    'ByVal hdc As Long,            '/* 塗りつぶしを行うデバイスハンドル */ 
    'ByVal x As Long, _            '/* 塗りつぶしを行う開始座標(x) */ 
    'ByVal y As Long,             '/* 塗りつぶしを行う開始座標(y) */ 
    'ByVal crColor As Long,       '/* 塗りつぶしを行う対象色 or 境界線色 */ 
    'ByVal wFillType As Long      '/* 塗りつぶしモードフラグ */ 

    '/* 塗りつぶしモードフラグ */ 
    Public Const FLOODFILLBORDER = 0    '/* crColorの色の境界線色まで塗りつぶしなさいモード */ 
    Public Const FLOODFILLSURFACE = 1   '/* crColorの色の部分を塗りつぶしなさいモード */ 


    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Dim g As Graphics = Me.CreateGraphics

        Dim hdc As Long = Me.Handle
        Dim x As Long = 150
        Dim y As Long = 150
        Dim crcolor As Long = ColorTranslator.ToWin32(Me.BackColor)   'これもかなり怪しい 
        Dim wFillType As Long = FLOODFILLSURFACE

        g.Clear(Me.BackColor)
        g.DrawRectangle(Pens.Red, 100, 100, 100, 100)

        Me.ForeColor = Color.Blue
        'VB6ではFillColorプロパティで色を設定していました。試しにこうしてみましたが勿論ダメでした。 

        ExtFloodFill(hdc, x, y, crcolor, wFillType)

    End Sub

End Class