'フォームに図形を描いて、Windowsのペイントのように塗りつぶすサンプル Imports System.Runtime.InteropServices '↑MarshalAs属性を使用するには必要みたいです Public Class Form1 '塗りつぶし関数 Private Declare Function ExtFloodFill Lib "gdi32" ( _ ByVal hdc As IntPtr, _ ByVal x As Integer, _ ByVal y As Integer, _ ByVal crColor As Integer, _ ByVal wFillType As UInteger) As <MarshalAs(UnmanagedType.Bool)> Boolean 'hdc 塗りつぶしを行うデバイスハンドル / 正しくはデバイスコンテキスト 'x 塗りつぶしを行う開始座標(x) 'y 塗りつぶしを行う開始座標(y) 'crColor 塗りつぶしを行う対象色 or 境界線色 'wFillType 塗りつぶしモードフラグ ' 塗りつぶしモードフラグ Public Const FLOODFILLBORDER As UInteger = 0UI ' crColorの色の境界線色まで塗りつぶしなさいモード Public Const FLOODFILLSURFACE As UInteger = 1UI ' crColorの色の部分を塗りつぶしなさいモード '色を指定するためのブラシ作成関数 Private Declare Function CreateBrushIndirect Lib "gdi32" (ByRef lpLogBrush As LOGBRUSH) As IntPtr '不要になったブラシの解放 Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean 'デバイスコンテキストの取得 Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As IntPtr) As IntPtr 'デバイスコンテキストの開放 Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As IntPtr, ByVal hdc As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean '色を指定するために使う関数(ブラシのもちかえ) Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As IntPtr, _ ByVal hObject As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean 'CreateBrushIndirectに渡す引数の構造体 Private Structure LOGBRUSH Public lbStyle As Integer Public lbColor As Integer Public lbHatch As Integer End Structure Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim g As Graphics = Me.CreateGraphics Dim hwnd As IntPtr = Me.Handle 'フォームのハンドル Dim hwdc As IntPtr = GetWindowDC(hwnd) 'デバイスコンテキスト Dim x As Integer = 150 Dim y As Integer = 150 Dim crcolor As Integer = ColorTranslator.ToWin32(Color.Red) 'System.Drawing.Colorをint型に変換する関数 Dim wFillType As UInteger = FLOODFILLBORDER '赤まで塗りつぶせモード Dim hNewBrush As Integer Dim hOldBrush As Integer Dim NewBrush As LOGBRUSH g.Clear(Me.BackColor) g.DrawRectangle(Pens.Red, 100, 100, 100, 100) '赤で四角を描く 'ブラシの作成 NewBrush.lbColor = ColorTranslator.ToWin32(Color.Blue) NewBrush.lbStyle = 0 NewBrush.lbHatch = 0 hNewBrush = CreateBrushIndirect(NewBrush) 'ブラシを持ち替える hOldBrush = SelectObject(hwdc, hNewBrush) 'ブラシの色で塗りつぶし ExtFloodFill(hwdc, x, y, crcolor, wFillType) '解放 これは必要なのかわからないけど念のため ReleaseDC(hwnd, hwdc) 'デバイスコンテキストを開放する hNewBrush = SelectObject(hwdc, hOldBrush) '元のブラシに戻す DeleteObject(hNewBrush) '不要になったブラシを開放する End Sub End Class