Ignore:
Timestamp:
Mar 31, 2009, 2:09:07 PM (15 years ago)
Author:
イグトランス (egtra)
Message:

GDI+をコンパイルできるように修正。FontFamily, Penの追加。サンプルとして、Step 32のGDI+版を制作。
(#56)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/ablib/src/Classes/System/Drawing/Graphics.ab

    r635 r698  
    44Namespace Drawing
    55
    6 Class Brush : End Class
    7 Class Pen : End Class
    8 Class StringFormat : End Class
    9 Class Image : End Class
    10 Class ImageAttributes : End Class
    11 Class Metafile : End Class
    12 Class Region : End Class
    13 Class GraphicsPath : End Class
    14 Class CachedBitmap : End Class
     6Class Brush
     7Public
     8    nativeBrush As *GpBrush
     9End Class
     10Class StringFormat
     11Public
     12    nativeFormat As *GpStringFormat
     13End Class
     14Class Image
     15Public
     16    nativeImage As *GpImage
     17End Class
     18Class ImageAttributes
     19Public
     20    nativeImage As *GpImageAttributes
     21End Class
     22Class Metafile
     23Inherits Image
     24End Class
     25Class Region
     26Public
     27    nativeRegion As *GpRegion
     28End Class
     29Class GraphicsPath
     30Public
     31    nativePath As *GpPath
     32End Class
     33Class CachedBitmap
     34Public
     35    nativeCachedBitmap As *GpCachedBitmap
     36End Class
     37
     38Delegate Function EnumerateMetafileProc(recordType As EmfPlusRecordType, flags As DWord, dataSize As DWord, data As *Byte, callbackData As VoidPtr) As Boolean
     39
     40Namespace Detail
     41
     42TypeDef NativeEnumerateMetafileProc = *Function(recordType As EmfPlusRecordType, flags As DWord, dataSize As DWord, data As *Byte, callbackData As VoidPtr) As Boolean
     43
     44Type EnumerateMetafileProcData
     45    Proc As EnumerateMetafileProc
     46    Data As VoidPtr
     47End Type
     48
     49Function NativeEnumerateMetafileProcEntry(recordType As EmfPlusRecordType, flags As DWord, dataSize As DWord, data As *Byte, callbackData As VoidPtr) As Boolean
     50    Dim procData = callbackData As *EnumerateMetafileProcData
     51    Dim proc = procData->Proc
     52    NativeEnumerateMetafileProcEntry = proc(recordType, flags, dataSize, data, procData->Data)
     53End Function
     54
     55End Namespace
    1556
    1657Class Graphics
     
    2061    '=========================================================================
    2162    Const Function Clip() As Region
    22         Dim r As Region
    23         GetClip(r)
    24         Return r
    25     End Function
    26 
    27     Sub Clip(region As /*Const*/ Region)
    28         SetClip(region, CombineMode.Replace)
     63        Clip = New Region
     64        SetStatus(GdipGetClip(nativeGraphics, Clip.nativeRegion))
     65    End Function
     66
     67    Sub Clip(region As Region)
     68        Imports System.Drawing.Drawing2D
     69        SetStatus(GdipSetClipRegion(nativeGraphics, region.nativeRegion, CombineMode.Replace))
    2970    End Sub
    3071
    3172    Const Function ClipBounds() As RectangleF
    32         Dim rc As RectangleF
    33         GetClipBounds(rc)
    34         Return rc
    35     End Function
    36 
    37     Sub ClipBounds(rc As RectangleF)
    38         SetClipBounds(rc)
    39     End Sub
    40 
    41     Function CompositingMode() As CompositingMode
    42         Return GetCompositingMode()
    43     End Function
    44 
    45     Sub CompositingMode(mode As CompositingMode)
    46         SetCompositingMode(mode)
    47     End Sub
    48 
    49     Function CompositingQuality() As CompositingQuality
    50         Return GetCompositingQuality()
    51     End Function
    52 
    53     Sub CompositingQuality(cq As CompositingQuality)
    54         SetCompositingQuality(cq)
    55     End Sub
    56 
     73        SetStatus(GdipGetClipBounds(nativeGraphics, ClipBounds))
     74    End Function
     75
     76    Const Function ClipBoundsI() As Rectangle
     77        SetStatus(GdipGetClipBoundsI(nativeGraphics, ClipBoundsI))
     78    End Function
     79/*
     80    Const Function CompositingMode() As Drawing2D.CompositingMode
     81        SetStatus(GdipGetCompositingMode(nativeGraphics, CompositingMode))
     82    End Function
     83
     84    Sub CompositingMode(mode As Drawing2D.CompositingMode)
     85        SetStatus(GdipSetCompositingMode(nativeGraphics, mode))
     86    End Sub
     87
     88    Function CompositingQuality() As Drawing2D.CompositingQuality
     89        SetStatus(GdipGetCompositingQuality(nativeGraphics, CompositingQuality))
     90    End Function
     91
     92    Sub CompositingQuality(cq As Drawing2D.CompositingQuality)
     93        Return SetStatus(GdipSetCompositingQuality(nativeGraphics, cq))
     94    End Sub
     95*/
    5796    Const Function DpiX() As Single
    58         Dim dpi As Single
    59         SetStatus(GdipGetDpiX(nativeGraphics, dpi))
    60         Return dpi
     97        SetStatus(GdipGetDpiX(nativeGraphics, DpiX))
    6198    End Function
    6299
    63100    Const Function DpiY() As Single
    64         Dim dpi As Single
    65         SetStatus(GdipGetDpiY(nativeGraphics, dpi))
    66         Return dpi
    67     End Function
    68 
    69     Const Function InterpolationMode() As InterpolationMode
    70         Return GetInterpolationMode()
    71     End Function
    72 
    73     Sub InterpolationMode(im As InterpolationMode)
    74         SetInterpolationMode(im)
    75     End Sub
    76 
    77     Const Function IsClipEmpty() As BOOL
     101        SetStatus(GdipGetDpiY(nativeGraphics, DpiY))
     102    End Function
     103/*
     104    Const Function InterpolationMode() As Drawing2D.InterpolationMode
     105        SetStatus(GdipGetInterpolationMode(nativeGraphics, InterpolationMode))
     106    End Function
     107
     108    Sub InterpolationMode(im As Drawing2D.InterpolationMode)
     109        InterpolationMode = SetStatus(GdipSetInterpolationMode(nativeGraphics, im))
     110    End Sub
     111*/
     112    Const Function IsClipEmpty() As Boolean
    78113        Dim b = FALSE As BOOL
    79114        SetStatus(GdipIsClipEmpty(nativeGraphics, b))
    80         Return b
    81     End Function
    82 
    83     Const Function IsVisibleClipEmpty() As BOOL
     115        IsClipEmpty = b As Boolean
     116    End Function
     117
     118    Const Function IsVisibleClipEmpty() As Boolean
    84119        Dim b = FALSE As BOOL
    85120        SetStatus(GdipIsVisibleClipEmpty(nativeGraphics, b))
    86         Return b
    87     End Function
    88 
    89     Function PageScale(scale As Single) As Status
    90         Return SetStatus(GdipSetPageScale(nativeGraphics, scale))
    91     End Function
     121        IsVisibleClipEmpty = b As Boolean
     122    End Function
     123
     124    Sub PageScale(scale As Single)
     125        SetStatus(GdipSetPageScale(nativeGraphics, scale))
     126    End Sub
    92127
    93128    Const Function PageScale() As Single
    94         Dim scale As Single
    95         SetStatus(GdipGetPageScale(nativeGraphics, scale))
    96         Return scale
    97     End Function
    98 
     129        SetStatus(GdipGetPageScale(nativeGraphics, PageScale))
     130    End Function
     131/*
    99132    Const Function PageUnit() As GraphicsUnit
    100         Dim unit As GraphicsUnit
    101         SetStatus(GdipGetPageUnit(nativeGraphics, unit))
    102         Return unit
    103     End Function
    104 
    105     Function PageUnit(unit As GraphicsUnit) As Status
    106         Return SetStatus(GdipSetPageUnit(nativeGraphics, unit))
    107     End Function
    108 
    109     Function PixelOffsetMode() As PixelOffsetMode
    110         Return GetPixelOffsetMode()
    111     End Function
    112 
    113     Sub PixelOffsetMode(mode  As PixelOffsetMode)
    114         SetPixelOffsetMode(mode)
     133        SetStatus(GdipGetPageUnit(nativeGraphics, PageUnit))
     134    End Function
     135*/
     136    Sub PageUnit(unit As GraphicsUnit)
     137        SetStatus(GdipSetPageUnit(nativeGraphics, unit))
     138    End Sub
     139/*
     140    Function PixelOffsetMode() As Drawing2D.PixelOffsetMode
     141        PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Invalid
     142        SetStatus(GdipGetPixelOffsetMode(nativeGraphics, PixelOffsetMode))
     143    End Function
     144*/
     145    Sub PixelOffsetMode(mode As Drawing2D.PixelOffsetMode)
     146        SetStatus(GdipSetPixelOffsetMode(nativeGraphics, mode))
    115147    End Sub
    116148
    117149    Function RenderingOrigin() As Point
    118         Dim pt As Point
    119         GetRenderingOrigin(pt.X, pt.Y)
    120         Return pt
     150        With RenderingOrigin
     151            .X = 0
     152            .Y = 0
     153            SetStatus(GdipGetRenderingOrigin(nativeGraphics, .X, .Y))
     154        End With
    121155    End Function
    122156
    123157    Sub RenderingOrigin(pt As Point)
    124         SetRenderingOrigin(pt.X, pt.Y)
    125     End Sub
    126 
    127     Function SmoothingMode() As SmoothingMode
    128         Return GetSmoothingMode()
    129     End Function
    130 
    131     Sub SmoothingMode(mode As SmoothingMode)
    132         SetSmoothingMode(mode)
     158        SetStatus(GdipSetRenderingOrigin(nativeGraphics, pt.X, pt.Y))
     159    End Sub
     160/*
     161    Function SmoothingMode() As Drawing2D.SmoothingMode
     162        SetStatus(GdipGetSmoothingMode(nativeGraphics, SmoothingMode))
     163    End Function
     164*/
     165    Sub SmoothingMode(mode As Drawing2D.SmoothingMode)
     166        SetStatus(GdipSetSmoothingMode(nativeGraphics, mode))
    133167    End Sub
    134168
    135169    Function TextContrast() As DWord
    136         Return GetTextContrast()
     170        SetStatus(GdipGetTextContrast(nativeGraphics, TextContrast))
    137171    End Function
    138172
    139173    Sub TextContrast(contrast As DWord)
    140         SetTextContrast(contrast)
    141     End Sub
    142 
    143     Function TextRenderingHint() As TextRenderingHint
    144         Return GetTextRenderingHint()
    145     End Function
    146 
     174        SetStatus(GdipSetTextContrast(nativeGraphics, contrast))
     175    End Sub
     176/*
     177    Function TextRenderingHint() As Text.TextRenderingHint
     178        SetStatus(GdipGetTextRenderingHint(nativeGraphics, ByVal VarPtr(TextRenderingHint)))
     179    End Function
     180*/
    147181    Sub TextRenderingHint(mode As TextRenderingHint)
    148         SetTextRenderingHint(mode)
    149     End Sub
    150 
    151     Function Transform() As Matrix
    152         Dim matrix As Matrix
    153         GetTransform(matrix)
    154         Return matrix
    155     End Function
    156 
    157     Sub Transform(matrix As Matrix)
    158         SetTransform(matirx)
     182        SetStatus(GdipSetTextRenderingHint(nativeGraphics, mode))
     183    End Sub
     184
     185    Function Transform() As Drawing2D.Matrix
     186        Dim native As *GpMatrix
     187        SetStatus(GdipGetWorldTransform(nativeGraphics, native))
     188        Transform = New Drawing2D.Matrix(native)
     189    End Function
     190
     191    Sub Transform(matrix As Drawing2D.Matrix)
     192        SetStatus(GdipSetWorldTransform(nativeGraphics, matrix.nativeMatrix))
    159193    End Sub
    160194
    161195    Function VisibleClipBounds() As RectangleF
    162         Dim rc As RectangleF
    163         GetVisibleClipBounds(rc)
    164         Return rc
     196        SetStatus(GdipGetVisibleClipBounds(nativeGraphics, VisibleClipBounds))
     197    End Function
     198
     199    Function VisibleClipBoundsI() As Rectangle
     200        SetStatus(GdipGetVisibleClipBoundsI(nativeGraphics, VisibleClipBoundsI))
    165201    End Function
    166202
     
    169205    '=========================================================================
    170206    Static Function FromHDC(hdc As HDC) As Graphics
    171         Return New Graphics(hdc)
     207        Dim graphics = 0 As *GpGraphics
     208        SetStatus(GdipCreateFromHDC(hdc, graphics))
     209        Return New Graphics(graphics)
    172210    End Function
    173211
    174212    Static Function FromHDC(hdc As HDC, hdevice As HANDLE) As Graphics
    175         Return New Graphics(hdc, hdevice)
    176     End Function
    177 
    178     Static Function FromHWND(hwnd As HWND) As Graphics
    179         Return New Graphics(hwnd, FALSE)
    180     End Function
    181 
    182     Static Function FromHWND(hwnd As DWord, icm As BOOL) As Graphics
    183         Return New Graphics(hwnd, icm)
     213        Dim graphics = 0 As *GpGraphics
     214        SetStatus(GdipCreateFromHDC2(hdc, hdevice, graphics))
     215        Return New Graphics(graphics)
     216    End Function
     217
     218    Static Function FromHwnd(hwnd As HWND) As Graphics
     219        Dim graphics = 0 As *GpGraphics
     220        SetStatus(GdipCreateFromHWND(hwnd, graphics))
     221        Return New Graphics(graphics)
     222    End Function
     223
     224    Static Function FromHwnd(hwnd As HWND, icm As Boolean) As Graphics
     225        Dim graphics = 0 As *GpGraphics
     226        If icm Then
     227            SetStatus(GdipCreateFromHWNDICM(hwnd, graphics))
     228        Else
     229            SetStatus(GdipCreateFromHWND(hwnd, graphics))
     230        End If
     231        Return New Graphics(graphics)
    184232    End Function
    185233
    186234    Static Function FromImage(image As Image) As Graphics
    187         Return New Graphics(image)
    188     End Function
    189 
    190     Sub Graphics(hdc As HDC)
    191         Dim graphics = 0 As GpGraphics
    192         lastResult = GdipCreateFromHDC(hdc, graphics)
    193         SetNativeGraphics(graphics)
    194     End Sub
    195 
    196     Sub Graphics(hdc As HDC, hdevice As HANDLE)
     235        If ActiveBasic.IsNothing(image) Then
     236            Throw New ArgumentNullException("image")
     237        End If
    197238        Dim graphics = 0 As *GpGraphics
    198         lastResult = GdipCreateFromHDC2(hdc, hdevice, graphics)
    199         SetNativeGraphics(graphics)
    200     End Sub
    201 
    202     Sub Graphics(hwnd As HWND)
    203         Dim graphics = 0 As *GpGraphics
    204         lastResult = GdipCreateFromHWND(hwnd, graphics)
    205         SetNativeGraphics(graphics)
    206     End Sub
    207 
    208     Sub Graphics(hwnd As HWND, icm As BOOL)
    209         Dim graphics = 0 As *GpGraphics
    210         If icm <> FALSE Then
    211             lastResult = GdipCreateFromHWNDICM(hwnd, graphics)
    212         Else
    213             lastResult = GdipCreateFromHWND(hwnd, graphics)
    214         End If
    215         SetNativeGraphics(graphics)
    216     End Sub
    217 
    218     Sub Graphics(image As Image)
    219         Dim graphics = 0 As *GpGraphics
    220         If (image != 0)
    221             lastResult = GdipGetImageGraphicsContext(image->NativeImage, graphics)
    222         End If
    223         SetNativeGraphics(graphics)
     239        SetStatus(GdipGetImageGraphicsContext(image.nativeImage, graphics))
     240        Return New Graphics(graphics)
     241    End Function
     242
     243    Sub Dispose()
     244        GdipDeleteGraphics(nativeGraphics)
     245        nativeGraphics = 0
    224246    End Sub
    225247
    226248    Sub ~Graphics()
    227         GdipDeleteGraphics(nativeGraphics)
     249        Dispose()
    228250    End Sub
    229251
    230252    Sub Flush()
    231         GdipFlush(nativeGraphics, FlushIntention.Flush)
    232     End Sub
    233 
    234     Sub Flush(intention As FlushIntention)
     253        GdipFlush(nativeGraphics, System.Drawing.Drawing2D.FlushIntention.Flush)
     254    End Sub
     255
     256    Sub Flush(intention As Drawing2D.FlushIntention)
    235257        GdipFlush(nativeGraphics, intention)
    236258    End Sub
    237259
    238     '------------------------------------------------------------------------
    239     ' GDI Interop methods
    240     '------------------------------------------------------------------------
    241 
    242     ' Locks the graphics until ReleaseDC is called
    243 
    244260    Function GetHDC() As HDC
    245         Dim hdc = 0 As HDC
    246         SetStatus(GdipGetDC(nativeGraphics, hdc))
    247         Return hdc
     261        GetHDC = 0
     262        SetStatus(GdipGetDC(nativeGraphics, GetHDC))
    248263    End Function
    249264
     
    252267    End Sub
    253268
    254     '------------------------------------------------------------------------
    255     ' Rendering modes
    256     '------------------------------------------------------------------------
    257 
    258     Function SetRenderingOrigin(x As Long, y As Long) As Status
    259         Return SetStatus(GdipSetRenderingOrigin(nativeGraphics, x, y))
    260     End Function
    261 
    262     Const Function GetRenderingOrigin(x As Long, y As Long) As Status
    263         Return SetStatus(GdipGetRenderingOrigin(nativeGraphics, x, y))
    264     End Function
    265 
    266     Function SetCompositingMode(compositingMode As CompositingMode) As Status
    267         Return SetStatus(GdipSetCompositingMode(nativeGraphics, compositingMode))
    268     End Function
    269 
    270     Const Function GetCompositingMode() As CompositingMode
    271         Dim mode As CompositingMode
    272         SetStatus(GdipGetCompositingMode(nativeGraphics, mode))
    273         Return mode
    274     End Function
    275 
    276     Function SetCompositingQuality(compositingQuality As CompositingQuality)
    277         Return SetStatus(GdipSetCompositingQuality(nativeGraphics, compositingQuality))
    278     End Function
    279 
    280     Const Function GetCompositingQuality() As CompositingQuality
    281         Dim quality As CompositingQuality
    282         SetStatus(GdipGetCompositingQuality(nativeGraphics, quality))
    283         Return quality
    284     End Function
    285 
    286     Function SetTextRenderingHint(newMode As TextRenderingHint) As Status
    287         Return SetStatus(GdipSetTextRenderingHint(nativeGraphics, newMode))
    288     End Function
    289 
    290     Const Function GetTextRenderingHint() As TextRenderingHint
    291         Dim hint As TextRenderingHint
    292         SetStatus(GdipGetTextRenderingHint(nativeGraphics, hint))
    293         Return hint
    294     End Function
    295 
    296     Function SetTextContrast(contrast As DWord) As Status
    297         Return SetStatus(GdipSetTextContrast(nativeGraphics, contrast))
    298     End Function
    299 
    300     Const Function GetTextContrast() As DWord
    301         Dim contrast As DWord
    302         SetStatus(GdipGetTextContrast(nativeGraphics, contrast))
    303         Return contrast
    304     End Function
    305 
    306     Const Function GetInterpolationMode() As InterpolationMode
    307         Dim mode = InterpolationMode.Invalid As InterpolationMode
    308         SetStatus(GdipGetInterpolationMode(nativeGraphics, mode))
    309         Return mode
    310     End Function
    311 
    312     Function SetInterpolationMode(interpolationMode As InterpolationMode) As Status
    313         Return SetStatus(GdipSetInterpolationMode(nativeGraphics, interpolationMode))
    314     End Function
    315 
    316     Const Function GetSmoothingMode() As SmoothingMode
    317         Dim smoothingMode = SmoothingMode.Invalid As SmoothingMode
    318         SetStatus(GdipGetSmoothingMode(nativeGraphics, smoothingMode))
    319         Return smoothingMode
    320     End Function
    321 
    322     Function SetSmoothingMode(smoothingMode As SmoothingMode) As Status
    323         Return SetStatus(GdipSetSmoothingMode(nativeGraphics, smoothingMode))
    324     End Function
    325 
    326     Const Function GetPixelOffsetMode() As PixelOffsetMode
    327         Dim pixelOffsetMode = PixelOffsetMode.Invalid As PixelOffsetMode
    328         SetStatus(GdipGetPixelOffsetMode(nativeGraphics, pixelOffsetMode))
    329         Return pixelOffsetMode
    330     End Function
    331 
    332     Function SetPixelOffsetMode(pixelOffsetMode As PixelOffsetMode) As Status
    333         Return SetStatus(GdipSetPixelOffsetMode(nativeGraphics, pixelOffsetMode))
    334     End Function
    335 
    336     '------------------------------------------------------------------------
    337     ' Manipulate current world transform
    338     '------------------------------------------------------------------------
    339 
    340     Function SetTransform(matrix As /*Const*/ *Matrix) As Status
    341         Return SetStatus(GdipSetWorldTransform(nativeGraphics, matrix->nativeMatrix))
    342     End Function
    343 
    344     Function ResetTransform() As Status
    345         Return SetStatus(GdipResetWorldTransform(nativeGraphics))
    346     End Function
    347 
    348     Function MultiplyTransform(matrix As /*Const*/ Matrix) As Status
    349         Return SetStatus(GdipMultiplyWorldTransform(nativeGraphics, matrix->nativeMatrix, MatrixOrder.Prepend))
    350     End Function
    351 
    352     Function MultiplyTransform(matrix As /*Const*/ Matrix, order As MatrixOrder) As Status
    353         Return SetStatus(GdipMultiplyWorldTransform(nativeGraphics, matrix->nativeMatrix, order))
    354     End Function
    355 
    356     Function TranslateTransform(dx As Single, dy As Single) As Status
    357         Return SetStatus(GdipTranslateWorldTransform(nativeGraphics, dx, dy, MatrixOrder.Prepend))
    358     End Function
    359 
    360     Function TranslateTransform(dx As Single, dy As Single, order As MatrixOrder) As Status
    361         Return SetStatus(GdipTranslateWorldTransform(nativeGraphics, dx, dy, order))
    362     End Function
    363 
    364     Function ScaleTransform(sx As Single, sy As Single) As Status
    365         Return SetStatus(GdipScaleWorldTransform(nativeGraphics, sx, sy, MatrixOrder.Prepend))
    366     End Function
    367 
    368     Function ScaleTransform(sx As Single, sy As Single, order As MatrixOrder) As Status
    369         Return SetStatus(GdipScaleWorldTransform(nativeGraphics, sx, sy, order))
    370     End Function
    371 
    372     Function RotateTransform(angle As Single) As Status
    373         Return SetStatus(GdipRotateWorldTransform(nativeGraphics, angle, MatrixOrder.Prepend))
    374     End Function
    375 
    376     Function RotateTransform(angle As Single, order As MatrixOrder) As Status
    377         Return SetStatus(GdipRotateWorldTransform(nativeGraphics, angle, order))
    378     End Function
    379 
    380     Const Function GetTransform(matrix As Matrix) As Status
    381         Return SetStatus(GdipGetWorldTransform(nativeGraphics, matrix->nativeMatrix))
    382     End Function
    383 
    384     Const Function TransformPoints(destSpace As CoordinateSpace, srcSpace As CoordinateSpace, pts As PointF, count As Long) As Status
    385         Return SetStatus(GdipTransformPoints(nativeGraphics, destSpace, srcSpace, pts, count))
    386     End Function
    387 
    388     Const Function TransformPoints(destSpace As CoordinateSpace, srcSpace As CoordinateSpace, pts As Point, count As Long) As Status
    389         Return SetStatus(GdipTransformPointsI(nativeGraphics, destSpace, srcSpace, pts, count))
    390     End Function
    391 
    392     '------------------------------------------------------------------------
    393     ' GetNearestColor (for <= 8bpp surfaces).   Note: Alpha is ignored.
    394     '------------------------------------------------------------------------
    395 
    396     Const Function GetNearestColor(color As Color) As Status
    397         Dim argb = color->Value
    398         Dim status = SetStatus(GdipGetNearestColor(nativeGraphics, argb))
    399         color->Value = argb
    400         Return status
    401     End Function
    402 
    403     Function DrawLine(pen As /*Const*/ Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single) As Status
    404         Return SetStatus(GdipDrawLine(nativeGraphics, pen->nativePen, x1, y1, x2, y2))
    405     End Function
    406 
    407     Function DrawLine(pen As /*Const*/ Pen, pt1 As /*Const*/ PointF, pt2 As /*Const*/ PointF) As Status
    408         Return DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y)
    409     End Function
    410 
    411     Function DrawLines(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long) As Status
    412         Return SetStatus(GdipDrawLines(nativeGraphics, pen->nativePen, points, count))
    413     End Function
    414 
    415     Function DrawLine(pen As /*Const*/ Pen, x1 As Long, y1 As Long, x2 As Long, y2 As Long) As Status
    416         Return SetStatus(GdipDrawLineI(nativeGraphics, pen->nativePen, x1, y1, x2, y2))
    417     End Function
    418 
    419     Function DrawLine(pen As /*Const*/ Pen, pt1 As /*Const*/ Point, pt2 As /*Const*/ Point) As Status
    420         Return DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y)
    421     End Function
    422 
    423     Function DrawLines(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long) As Status
    424         Return SetStatus(GdipDrawLinesI(nativeGraphics, pen->nativePen, points, count))
    425     End Function
    426 
    427     Function DrawArc(pen As /*Const*/ Pen, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single) As Status
    428         Return SetStatus(GdipDrawArc(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle))
    429     End Function
    430 
    431     Function DrawArc(pen As /*Const*/ Pen, rect As /*Const*/ RectangleF, startAngle As Single, sweepAngle As Single) As Status
    432         Return DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
    433     End Function
    434 
    435     Function DrawArc(pen As /*Const*/ Pen, x As Long, y As Long, width As Long, height As Long, startAngle As Single, sweepAngle As Single) As Status
    436         Return SetStatus(GdipDrawArcI(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle))
    437     End Function
    438 
    439     Function DrawArc(pen As /*Const*/ Pen, rect As /*Const*/ Rectangle, startAngle As Single, sweepAngle As Single) As Status
    440         Return DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
    441     End Function
    442 
    443     Function DrawBezier(pen As /*Const*/ Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single, x3 As Single, y3 As Single, x4 As Single, y4 As Single) As Status
    444         Return SetStatus(GdipDrawBezier(nativeGraphics, pen->nativePen, x1, y1,x2, y2, x3, y3, x4, y4))
    445     End Function
    446 
    447     Function DrawBezier(pen As /*Const*/ Pen, pt1 As /*Const*/ PointF, pt2 As /*Const*/ PointF, pt3 As /*Const*/ PointF, pt4 As /*Const*/ PointF) As Status
    448         Return DrawBezier(pen, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
    449     End Function
    450 
    451     Function DrawBeziers(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long) As Status
    452         Return SetStatus(GdipDrawBeziers(nativeGraphics, pen->nativePen, points, count))
    453     End Function
    454 
    455     Function DrawBezier(pen As /*Const*/ Pen, x1 As Long, y1 As Long, x2 As Long, y2 As Long, x3 As Long, y3 As Long, x4 As Long, y4 As Long) As Status
    456         Return SetStatus(GdipDrawBezierI(nativeGraphics, pen->nativePen, x1, y1, x2, y2, x3, y3, x4, y4))
    457     End Function
    458 
    459     Function DrawBezier(pen As /*Const*/ Pen, pt1 As /*Const*/ Point, pt2 As /*Const*/ Point, pt3 As /*Const*/ Point, pt4 As /*Const*/ Point) As Status
    460         Return DrawBezier(pen pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
    461     End Function
    462 
    463     Function DrawBeziers(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long) As Status
    464         Return SetStatus(GdipDrawBeziersI(nativeGraphics, pen->nativePen, points, count))
    465     End Function
    466 
    467     Function DrawRectangle(pen As /*Const*/ Pen, rect As /*Const*/ RectangleF) As Status
    468         Return DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height)
    469     End Function
    470 
    471     Function DrawRectangle(pen As /*Const*/ Pen, x As Single, y As Single, width As Single, height As Single) As Status
    472         Return SetStatus(GdipDrawRectangle(nativeGraphics, pen->nativePen, x, y, width, height))
    473     End Function
    474 
    475     Function DrawRectangles(pen As /*Const*/ Pen, rects As /*Const*/ *RectangleF, count As Long) As Status
    476         Return SetStatus(GdipDrawRectangles(nativeGraphics, pen->nativePen, rects, count))
    477     End Function
    478 
    479     Function DrawRectangle(pen As /*Const*/ Pen, rect As /*Const*/ Rectangle) As Status
    480         Return DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height)
    481     End Function
    482 
    483     Function DrawRectangle(pen As /*Const*/ Pen, x As Long, y As Long, width As Long, height As Long) As Status
    484         Return SetStatus(GdipDrawRectangleI(nativeGraphics, pen->nativePen, x, y, width, height))
    485     End Function
    486 
    487     Function DrawRectangles(pen As /*Const*/ Pen, rects As /*Const*/ *Rectangle,  count As Long) As Status
    488         Return SetStatus(GdipDrawRectanglesI(nativeGraphics, pen->nativePen, rects, count))
    489     End Function
    490 
    491     Function DrawEllipse(pen As /*Const*/ Pen, rect As /*Const*/ RectangleF) As Status
    492         Return DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height)
    493     End Function
    494 
    495     Function DrawEllipse(pen As /*Const*/ Pen, x As Single, y As Single, width As Single, height As Single) As Status
    496         Return SetStatus(GdipDrawEllipse(nativeGraphics, pen->nativePen, x, y, width, height))
    497     End Function
    498 
    499     Function DrawEllipse(pen As /*Const*/ Pen, rect As /*Const*/ Rectangle) As Status
    500         Return DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height)
    501     End Function
    502 
    503     Function DrawEllipse(pen As /*Const*/ Pen, x As Long, y As Long, width As Long, height As Long) As Status
    504         Return SetStatus(GdipDrawEllipseI(nativeGraphics, pen->nativePen, x, y, width, height))
    505     End Function
    506 
    507     Function DrawPie(pen As /*Const*/ Pen, rect As /*Const*/ RectangleF, startAngle As Single, sweepAngle As Single) As Status
    508         Return DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
    509     End Function
    510 
    511     Function DrawPie(pen As /*Const*/ Pen, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single) As Status
    512         Return SetStatus(GdipDrawPie(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle))
    513     End Function
    514 
    515     Function DrawPie(pen As /*Const*/ Pen, rect As /*Const*/ Rectangle, startAngle As Single, sweepAngle As Single) As Status
    516         Return DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
    517     End Function
    518 
    519     Function DrawPie(pen As /*Const*/ Pen, x As Long, y As Long, width As Long, height As Long, startAngle As Single, sweepAngle As Single) As Status
    520         Return SetStatus(GdipDrawPieI(nativeGraphics, pen->nativePen, x, y, width, height, startAngle, sweepAngle))
    521     End Function
    522 
    523     Function DrawPolygon(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long) As Status
    524         Return SetStatus(GdipDrawPolygon(nativeGraphics, pen->nativePen, points, count))
    525     End Function
    526 
    527     Function DrawPolygon(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long) As Status
    528         Return SetStatus(GdipDrawPolygonI(nativeGraphics, pen->nativePen, points, count))
    529     End Function
    530 
    531     Function DrawPath(pen As /*Const*/ Pen, path As /*Const*/ GraphicsPath) As Status
    532         Return SetStatus(GdipDrawPath(nativeGraphics, pen->nativePen, path->nativePath))
    533 '       Return SetStatus(GdipDrawPath(nativeGraphics, pen ? pen->nativePen : NULL, path ? path->nativePath : NULL))
    534     End Function
    535 
    536     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long) As Status
    537         Return SetStatus(GdipDrawCurve(nativeGraphics, pen->nativePen, points, count))
    538     End Function
    539 
    540     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long, tension As Single) As Status
    541         Return SetStatus(GdipDrawCurve2(nativeGraphics, pen->nativePen, points,count, tension))
    542     End Function
    543 
    544     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long, offset As Long, numberOfSegments As Long) As Status
    545         Return SetStatus(GdipDrawCurve3(nativeGraphics, pen->nativePen, points, count, offset,numberOfSegments, 0.5))
    546     End Function
    547 
    548     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long, offset As Long, numberOfSegments As Long, tension As Single) As Status
    549         Return SetStatus(GdipDrawCurve3(nativeGraphics, pen->nativePen, points, count, offset,numberOfSegments, tension))
    550     End Function
    551 
    552     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long) As Status
    553         Return SetStatus(GdipDrawCurveI(nativeGraphics, pen->nativePen, points, count))
    554     End Function
    555 
    556     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long, tension As Single) As Status
    557         Return SetStatus(GdipDrawCurve2I(nativeGraphics, pen->nativePen, points, count, tension))
    558     End Function
    559 
    560     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long, offset As Long, numberOfSegments As Long) As Status
    561         Return SetStatus(GdipDrawCurve3I(nativeGraphics, pen->nativePen, points, count, offset, numberOfSegments, 0.5))
    562     End Function
    563 
    564     Function DrawCurve(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long, offset As Long, numberOfSegments As Long, tension As Single) As Status
    565         Return SetStatus(GdipDrawCurve3I(nativeGraphics, pen->nativePen, points, count, offset, numberOfSegments, tension))
    566     End Function
    567 
    568     Function DrawClosedCurve(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long) As Status
    569         Return SetStatus(GdipDrawClosedCurve(nativeGraphics, pen->nativePen, points, count))
    570     End Function
    571 
    572     Function DrawClosedCurve(pen As /*Const*/ Pen, points As /*Const*/ *PointF, count As Long, tension As Single) As Status
    573         Return SetStatus(GdipDrawClosedCurve2(nativeGraphics, pen->nativePen, points, count, tension))
    574     End Function
    575 
    576     Function DrawClosedCurve(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long) As Status
    577         Return SetStatus(GdipDrawClosedCurveI(nativeGraphics, pen->nativePen, points, count))
    578     End Function
    579 
    580     Function DrawClosedCurve(pen As /*Const*/ Pen, points As /*Const*/ *Point, count As Long, tension As Single) As Status
    581         Return SetStatus(GdipDrawClosedCurve2I(nativeGraphics, pen->nativePen, points, count, tension))
    582     End Function
    583 
    584     Function Clear(color As /*Const*/ Color) As Status
    585         Return SetStatus(GdipGraphicsClear(nativeGraphics, color.Value))
    586     End Function
    587 
    588     Function FillRectangle(brush As /*Const*/ Brush, rect As /*Const*/ RectangleF) As Status
    589         Return FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height)
    590     End Function
    591 
    592     Function FillRectangle(brush As /*Const*/ Brush, x As Single, y As Single, width As Single, height As Single) As Status
    593         Return SetStatus(GdipFillRectangle(nativeGraphics, brush->nativeBrush, x, y, width, height))
    594     End Function
    595 
    596     Function FillRectangles(brush As /*Const*/ Brush, rects As /*Const*/ *RectangleF, count As Long) As Status
    597         Return SetStatus(GdipFillRectangles(nativeGraphics,brush->nativeBrush,rects, count))
    598     End Function
    599 
    600     Function FillRectangle(brush As /*Const*/ Brush, rect As /*Const*/ Rectangle) As Status
    601         Return FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height)
    602     End Function
    603 
    604     Function FillRectangle(brush As /*Const*/ Brush, x As Long, y As Long, width As Long, height As Long) As Status
    605         Return SetStatus(GdipFillRectangleI(nativeGraphics, brush->nativeBrush, x, y, width, height))
    606     End Function
    607 
    608     Function FillRectangles(brush As /*Const*/ Brush, rects As /*Const*/ *Rectangle, count As Long) As Status
    609         Return SetStatus(GdipFillRectanglesI(nativeGraphics, brush->nativeBrush, rects, count))
    610     End Function
    611 
    612     Function FillPolygon(brush As /*Const*/ Brush, points As /*Const*/ *PointF, count As Long) As Status
    613         Return FillPolygon(brush, points, count, FillModeAlternate)
    614     End Function
    615 
    616     Function FillPolygon(brush As /*Const*/ Brush, points As /*Const*/ *PointF, count As Long, fillMode As FillMode) As Status
    617         Return SetStatus(GdipFillPolygon(nativeGraphics, brush->nativeBrush, points, count, fillMode))
    618     End Function
    619 
    620     Function FillPolygon(brush As /*Const*/ Brush, points As /*Const*/ *Point, count As Long) As Status
    621         Return FillPolygon(brush, points, count, FillModeAlternate)
    622     End Function
    623 
    624     Function FillPolygon(brush As /*Const*/ Brush, points As /*Const*/ *Point, count As Long, fillMode As FillMode) As Status
    625         Return SetStatus(GdipFillPolygonI(nativeGraphics, brush->nativeBrush, points, count, fillMode))
    626     End Function
    627 
    628     Function FillEllipse(brush As /*Const*/ Brush, rect As /*Const*/ RectangleF) As Status
    629         Return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height)
    630     End Function
    631 
    632     Function FillEllipse(brush As /*Const*/ Brush, x As Single, y As Single, width As Single, height As Single) As Status
    633         Return SetStatus(GdipFillEllipse(nativeGraphics, brush->nativeBrush, x, y, width, height))
    634     End Function
    635 
    636     Function FillEllipse(brush As /*Const*/ Brush, rect As /*Const*/ Rectangle) As Status
    637         Return FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height)
    638     End Function
    639 
    640     Function FillEllipse(brush As /*Const*/ Brush, x As Long, y As Long, width As Long, height As Long) As Status
    641         Return SetStatus(GdipFillEllipseI(nativeGraphics, brush->nativeBrush, x, y, width, height))
    642     End Function
    643 
    644     Function FillPie(brush As /*Const*/ Brush, rect As /*Const*/ RectangleF, startAngle As Single, sweepAngle As Single) As Status
    645         Return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
    646     End Function
    647 
    648     Function FillPie(brush As /*Const*/ Brush, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single) As Status
    649         Return SetStatus(GdipFillPie(nativeGraphics, brush->nativeBrush, x, y, width, height, startAngle, sweepAngle))
    650     End Function
    651 
    652     Function FillPie(brush As /*Const*/ Brush, rect As /*Const*/ Rectangle, startAngle As Single, sweepAngle As Single) As Status
    653         Return FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
    654     End Function
    655 
    656     Function FillPie(brush As /*Const*/ Brush, x As Long, y As Long, width As Long, height As Long, startAngle As Single, sweepAngle As Single) As Status
    657         Return SetStatus(GdipFillPieI(nativeGraphics, brush->nativeBrush, x, y, width, height, startAngle, sweepAngle))
    658     End Function
    659 
    660     Function FillPath(brush As /*Const*/ Brush, path As /*Const*/ GraphicsPath) As Status
    661         Return SetStatus(GdipFillPath(nativeGraphics, brush->nativeBrush, path->nativePath))
    662     End Function
    663 
    664     Function FillClosedCurve(brush As /*Const*/ Brush, points As /*Const*/ *PointF, count As Long) As Status
    665         Return SetStatus(GdipFillClosedCurve(nativeGraphics, brush->nativeBrush, points, count))
    666     End Function
    667 
    668     Function FillClosedCurve(brush As /*Const*/ Brush, points As /*Const*/ *PointF, count As Long, fillMode As FillMode) As Status
    669         Return SetStatus(GdipFillClosedCurve2(nativeGraphics, brush->nativeBrush, points, count, 0.5, fillMode))
    670     End Function
    671 
    672     Function FillClosedCurve(brush As /*Const*/ Brush, points As /*Const*/ *PointF, count As Long, fillMode As FillMode, tension As Single) As Status
    673         Return SetStatus(GdipFillClosedCurve2(nativeGraphics, brush->nativeBrush, points, count, tension, fillMode))
    674     End Function
    675 
    676     Function FillClosedCurve(brush As /*Const*/ Brush, points As /*Const*/ *Point, count As Long) As Status
    677         Return SetStatus(GdipFillClosedCurveI(nativeGraphics, brush->nativeBrush, points, count))
    678     End Function
    679 
    680     Function FillClosedCurve(brush As /*Const*/ Brush, points As /*Const*/ *Point, count As Long, fillMode As FillMode) As Status
    681         Return SetStatus(GdipFillClosedCurve2I(nativeGraphics, brush->nativeBrush, points, count, 0.5, fillMode))
    682     End Function
    683 
    684     Function FillClosedCurve(brush As /*Const*/ Brush, points As /*Const*/ *Point, count As Long, fillMode As FillMode, tension As Single) As Status
    685         Return SetStatus(GdipFillClosedCurve2I(nativeGraphics, brush->nativeBrush, points, count, tension, fillMode))
    686     End Function
    687 
    688     Function FillRegion(brush As /*Const*/ Brush, region As /*Const*/ Region) As Status
    689         Return SetStatus(GdipFillRegion(nativeGraphics, brush->nativeBrush, region->nativeRegion))
    690     End Function
    691 
    692     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, layoutRect As /*Const*/ RectangleF) As Status
    693         Dim nativeFont As *GpFont
    694         If VarPtr(font) <> 0 Then
    695             nativeFont = font.nativeFormat
    696         Else
    697             nativeFont = 0
     269    Sub ResetTransform()
     270        SetStatus(GdipResetWorldTransform(nativeGraphics))
     271    End Sub
     272
     273    Sub MultiplyTransform(matrix As Drawing2D.Matrix)
     274        SetStatus(GdipMultiplyWorldTransform(nativeGraphics, matrix.nativeMatrix, System.Drawing.Drawing2D.MatrixOrder.Prepend))
     275    End Sub
     276
     277    Sub MultiplyTransform(matrix As Drawing2D.Matrix, order As Drawing2D.MatrixOrder)
     278        SetStatus(GdipMultiplyWorldTransform(nativeGraphics, matrix.nativeMatrix, order))
     279    End Sub
     280
     281    Sub TranslateTransform(dx As Single, dy As Single)
     282        SetStatus(GdipTranslateWorldTransform(nativeGraphics, dx, dy, System.Drawing.Drawing2D.MatrixOrder.Prepend))
     283    End Sub
     284
     285    Sub TranslateTransform(dx As Single, dy As Single, order As Drawing2D.MatrixOrder)
     286        SetStatus(GdipTranslateWorldTransform(nativeGraphics, dx, dy, order))
     287    End Sub
     288
     289    Sub ScaleTransform(sx As Single, sy As Single)
     290        SetStatus(GdipScaleWorldTransform(nativeGraphics, sx, sy, System.Drawing.Drawing2D.MatrixOrder.Prepend))
     291    End Sub
     292
     293    Sub ScaleTransform(sx As Single, sy As Single, order As Drawing2D.MatrixOrder)
     294        SetStatus(GdipScaleWorldTransform(nativeGraphics, sx, sy, order))
     295    End Sub
     296
     297    Sub RotateTransform(angle As Single)
     298        SetStatus(GdipRotateWorldTransform(nativeGraphics, angle, System.Drawing.Drawing2D.MatrixOrder.Prepend))
     299    End Sub
     300
     301    Sub RotateTransform(angle As Single, order As Drawing2D.MatrixOrder)
     302        SetStatus(GdipRotateWorldTransform(nativeGraphics, angle, order))
     303    End Sub
     304
     305    Sub TransformPoints(destSpace As Drawing2D.CoordinateSpace, srcSpace As Drawing2D.CoordinateSpace, pts As *PointF, count As Long)
     306        SetStatus(GdipTransformPoints(nativeGraphics, destSpace, srcSpace, pts, count))
     307    End Sub
     308
     309    Sub TransformPoints(destSpace As Drawing2D.CoordinateSpace, srcSpace As Drawing2D.CoordinateSpace, pts As *Point, count As Long)
     310        SetStatus(GdipTransformPointsI(nativeGraphics, destSpace, srcSpace, pts, count))
     311    End Sub
     312
     313    Const Function GetNearestColor(color As Color) As Color
     314        GetNearestColor = color
     315        SetStatus(GdipGetNearestColor(nativeGraphics, GetNearestColor))
     316    End Function
     317
     318    Sub DrawLine(pen As Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single)
     319        SetStatus(GdipDrawLine(nativeGraphics, pen.NativePen, x1, y1, x2, y2))
     320    End Sub
     321
     322    Sub DrawLine(pen As Pen, ByRef pt1 As PointF, ByRef pt2 As PointF)
     323        DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y)
     324    End Sub
     325
     326    Sub DrawLines(pen As Pen, points As *PointF, count As Long)
     327        SetStatus(GdipDrawLines(nativeGraphics, pen.NativePen, points, count))
     328    End Sub
     329
     330    Sub DrawLine(pen As Pen, x1 As Long, y1 As Long, x2 As Long, y2 As Long)
     331        SetStatus(GdipDrawLineI(nativeGraphics, pen.NativePen, x1, y1, x2, y2))
     332    End Sub
     333
     334    Sub DrawLine(pen As Pen, ByRef pt1 As Point, ByRef pt2 As Point)
     335        DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y)
     336    End Sub
     337
     338    Sub DrawLines(pen As Pen, points As *Point, count As Long)
     339        SetStatus(GdipDrawLinesI(nativeGraphics, pen.NativePen, points, count))
     340    End Sub
     341
     342    Sub DrawArc(pen As Pen, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single)
     343        SetStatus(GdipDrawArc(nativeGraphics, pen.NativePen, x, y, width, height, startAngle, sweepAngle))
     344    End Sub
     345
     346    Sub DrawArc(pen As Pen, ByRef rect As RectangleF, startAngle As Single, sweepAngle As Single)
     347        DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
     348    End Sub
     349
     350    Sub DrawArc(pen As Pen, x As Long, y As Long, width As Long, height As Long, startAngle As Single, sweepAngle As Single)
     351        SetStatus(GdipDrawArcI(nativeGraphics, pen.NativePen, x, y, width, height, startAngle, sweepAngle))
     352    End Sub
     353
     354    Sub DrawArc(pen As Pen, ByRef rect As Rectangle, startAngle As Single, sweepAngle As Single)
     355        DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
     356    End Sub
     357
     358    Sub DrawBezier(pen As Pen, x1 As Single, y1 As Single, x2 As Single, y2 As Single, x3 As Single, y3 As Single, x4 As Single, y4 As Single)
     359        SetStatus(GdipDrawBezier(nativeGraphics, pen.NativePen, x1, y1,x2, y2, x3, y3, x4, y4))
     360    End Sub
     361
     362    Sub DrawBezier(pen As Pen, ByRef pt1 As PointF, ByRef pt2 As PointF, ByRef pt3 As PointF, ByRef pt4 As PointF)
     363        DrawBezier(pen, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
     364    End Sub
     365
     366    Sub DrawBeziers(pen As Pen, points As *PointF, count As Long)
     367        SetStatus(GdipDrawBeziers(nativeGraphics, pen.NativePen, points, count))
     368    End Sub
     369
     370    Sub DrawBezier(pen As Pen, x1 As Long, y1 As Long, x2 As Long, y2 As Long, x3 As Long, y3 As Long, x4 As Long, y4 As Long)
     371        SetStatus(GdipDrawBezierI(nativeGraphics, pen.NativePen, x1, y1, x2, y2, x3, y3, x4, y4))
     372    End Sub
     373
     374    Sub DrawBezier(pen As Pen, ByRef pt1 As Point, ByRef pt2 As Point, ByRef pt3 As Point, ByRef pt4 As Point)
     375        DrawBezier(pen, pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y)
     376    End Sub
     377
     378    Sub DrawBeziers(pen As Pen, points As *Point, count As Long)
     379        SetStatus(GdipDrawBeziersI(nativeGraphics, pen.NativePen, points, count))
     380    End Sub
     381
     382    Sub DrawRectangle(pen As Pen, ByRef rect As RectangleF)
     383        DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height)
     384    End Sub
     385
     386    Sub DrawRectangle(pen As Pen, x As Single, y As Single, width As Single, height As Single)
     387        SetStatus(GdipDrawRectangle(nativeGraphics, pen.NativePen, x, y, width, height))
     388    End Sub
     389
     390    Sub DrawRectangles(pen As Pen, rects As *RectangleF, count As Long)
     391        SetStatus(GdipDrawRectangles(nativeGraphics, pen.NativePen, rects, count))
     392    End Sub
     393
     394    Sub DrawRectangle(pen As Pen, ByRef rect As Rectangle)
     395        DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height)
     396    End Sub
     397
     398    Sub DrawRectangle(pen As Pen, x As Long, y As Long, width As Long, height As Long)
     399        SetStatus(GdipDrawRectangleI(nativeGraphics, pen.NativePen, x, y, width, height))
     400    End Sub
     401
     402    Sub DrawRectangles(pen As Pen, rects As *Rectangle, count As Long)
     403        SetStatus(GdipDrawRectanglesI(nativeGraphics, pen.NativePen, rects, count))
     404    End Sub
     405
     406    Sub DrawEllipse(pen As Pen, ByRef rect As RectangleF)
     407        DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height)
     408    End Sub
     409
     410    Sub DrawEllipse(pen As Pen, x As Single, y As Single, width As Single, height As Single)
     411        SetStatus(GdipDrawEllipse(nativeGraphics, pen.NativePen, x, y, width, height))
     412    End Sub
     413
     414    Sub DrawEllipse(pen As Pen, ByRef rect As Rectangle)
     415        DrawEllipse(pen, rect.X, rect.Y, rect.Width, rect.Height)
     416    End Sub
     417
     418    Sub DrawEllipse(pen As Pen, x As Long, y As Long, width As Long, height As Long)
     419        SetStatus(GdipDrawEllipseI(nativeGraphics, pen.NativePen, x, y, width, height))
     420    End Sub
     421
     422    Sub DrawPie(pen As Pen, ByRef rect As RectangleF, startAngle As Single, sweepAngle As Single)
     423        DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
     424    End Sub
     425
     426    Sub DrawPie(pen As Pen, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single)
     427        SetStatus(GdipDrawPie(nativeGraphics, pen.NativePen, x, y, width, height, startAngle, sweepAngle))
     428    End Sub
     429
     430    Sub DrawPie(pen As Pen, ByRef rect As Rectangle, startAngle As Single, sweepAngle As Single)
     431        DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
     432    End Sub
     433
     434    Sub DrawPie(pen As Pen, x As Long, y As Long, width As Long, height As Long, startAngle As Single, sweepAngle As Single)
     435        SetStatus(GdipDrawPieI(nativeGraphics, pen.NativePen, x, y, width, height, startAngle, sweepAngle))
     436    End Sub
     437
     438    Sub DrawPolygon(pen As Pen, points As *PointF, count As Long)
     439        SetStatus(GdipDrawPolygon(nativeGraphics, pen.NativePen, points, count))
     440    End Sub
     441
     442    Sub DrawPolygon(pen As Pen, points As *Point, count As Long)
     443        SetStatus(GdipDrawPolygonI(nativeGraphics, pen.NativePen, points, count))
     444    End Sub
     445
     446    Sub DrawPath(pen As Pen, path As GraphicsPath)
     447        If ActiveBasic.IsNothing(pen) Or ActiveBasic.IsNothing(path) Then
     448            Throw New ArgumentNullException("pen or path or both")
    698449        End If
    699         Return SetStatus(GdipDrawString( nativeGraphics, str, length, nativeFont, layoutRect, 0, 0))
    700     End Function
    701 
    702     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, layoutRect As /*Const*/ Rectangle,
    703         stringFormat As /*Const*/ StringFormat, brush As /*Const*/ Brush) As Status
    704 
    705         Dim nativeFont As *GpFont
    706         If VarPtr(font) <> 0 Then
    707             nativeFont = font.nativeFormat
    708         Else
    709             nativeFont = 0
     450        SetStatus(GdipDrawPath(nativeGraphics, pen.NativePen, path.nativePath))
     451    End Sub
     452
     453    Sub DrawCurve(pen As Pen, points As *PointF, count As Long)
     454        SetStatus(GdipDrawCurve(nativeGraphics, pen.NativePen, points, count))
     455    End Sub
     456
     457    Sub DrawCurve(pen As Pen, points As *PointF, count As Long, tension As Single)
     458        SetStatus(GdipDrawCurve2(nativeGraphics, pen.NativePen, points,count, tension))
     459    End Sub
     460
     461    Sub DrawCurve(pen As Pen, points As *PointF, count As Long, offset As Long, numberOfSegments As Long)
     462        SetStatus(GdipDrawCurve3(nativeGraphics, pen.NativePen, points, count, offset,numberOfSegments, 0.5))
     463    End Sub
     464
     465    Sub DrawCurve(pen As Pen, points As *PointF, count As Long, offset As Long, numberOfSegments As Long, tension As Single)
     466        SetStatus(GdipDrawCurve3(nativeGraphics, pen.NativePen, points, count, offset,numberOfSegments, tension))
     467    End Sub
     468
     469    Sub DrawCurve(pen As Pen, points As *Point, count As Long)
     470        SetStatus(GdipDrawCurveI(nativeGraphics, pen.NativePen, points, count))
     471    End Sub
     472
     473    Sub DrawCurve(pen As Pen, points As *Point, count As Long, tension As Single)
     474        SetStatus(GdipDrawCurve2I(nativeGraphics, pen.NativePen, points, count, tension))
     475    End Sub
     476
     477    Sub DrawCurve(pen As Pen, points As *Point, count As Long, offset As Long, numberOfSegments As Long)
     478        SetStatus(GdipDrawCurve3I(nativeGraphics, pen.NativePen, points, count, offset, numberOfSegments, 0.5))
     479    End Sub
     480
     481    Sub DrawCurve(pen As Pen, points As *Point, count As Long, offset As Long, numberOfSegments As Long, tension As Single)
     482        SetStatus(GdipDrawCurve3I(nativeGraphics, pen.NativePen, points, count, offset, numberOfSegments, tension))
     483    End Sub
     484
     485    Sub DrawClosedCurve(pen As Pen, points As *PointF, count As Long)
     486        SetStatus(GdipDrawClosedCurve(nativeGraphics, pen.NativePen, points, count))
     487    End Sub
     488
     489    Sub DrawClosedCurve(pen As Pen, points As *PointF, count As Long, tension As Single)
     490        SetStatus(GdipDrawClosedCurve2(nativeGraphics, pen.NativePen, points, count, tension))
     491    End Sub
     492
     493    Sub DrawClosedCurve(pen As Pen, points As *Point, count As Long)
     494        SetStatus(GdipDrawClosedCurveI(nativeGraphics, pen.NativePen, points, count))
     495    End Sub
     496
     497    Sub DrawClosedCurve(pen As Pen, points As *Point, count As Long, tension As Single)
     498        SetStatus(GdipDrawClosedCurve2I(nativeGraphics, pen.NativePen, points, count, tension))
     499    End Sub
     500
     501    Sub Clear(color As Color)
     502        SetStatus(GdipGraphicsClear(nativeGraphics, color))
     503    End Sub
     504
     505    Sub FillRectangle(brush As Brush, ByRef rect As RectangleF)
     506        FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height)
     507    End Sub
     508
     509    Sub FillRectangle(brush As Brush, x As Single, y As Single, width As Single, height As Single)
     510        SetStatus(GdipFillRectangle(nativeGraphics, brush.nativeBrush, x, y, width, height))
     511    End Sub
     512
     513    Sub FillRectangles(brush As Brush, rects As *RectangleF, count As Long)
     514        SetStatus(GdipFillRectangles(nativeGraphics,brush.nativeBrush,rects, count))
     515    End Sub
     516
     517    Sub FillRectangle(brush As Brush, ByRef rect As Rectangle)
     518        FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height)
     519    End Sub
     520
     521    Sub FillRectangle(brush As Brush, x As Long, y As Long, width As Long, height As Long)
     522        SetStatus(GdipFillRectangleI(nativeGraphics, brush.nativeBrush, x, y, width, height))
     523    End Sub
     524
     525    Sub FillRectangles(brush As Brush, rects As *Rectangle, count As Long)
     526        SetStatus(GdipFillRectanglesI(nativeGraphics, brush.nativeBrush, rects, count))
     527    End Sub
     528
     529'   Sub FillPolygon(brush As Brush, points As *PointF, count As Long)
     530'       FillPolygon(brush, points, count, System.Drawing.Drawing2D.FillMode.Alternate)
     531'   End Sub
     532
     533    Sub FillPolygon(brush As Brush, points As *PointF, count As Long, fillMode As Drawing2D.FillMode)
     534        SetStatus(GdipFillPolygon(nativeGraphics, brush.nativeBrush, points, count, fillMode))
     535    End Sub
     536
     537'   Sub FillPolygon(brush As Brush, points As *Point, count As Long)
     538'       FillPolygon(brush, points, count, System.Drawing.Drawing2D.FillMode.Alternate)
     539'   End Sub
     540
     541    Sub FillPolygon(brush As Brush, points As *Point, count As Long, fillMode As Drawing2D.FillMode)
     542        SetStatus(GdipFillPolygonI(nativeGraphics, brush.nativeBrush, points, count, fillMode))
     543    End Sub
     544
     545    Sub FillEllipse(brush As Brush, ByRef rect As RectangleF)
     546        FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height)
     547    End Sub
     548
     549    Sub FillEllipse(brush As Brush, x As Single, y As Single, width As Single, height As Single)
     550        SetStatus(GdipFillEllipse(nativeGraphics, brush.nativeBrush, x, y, width, height))
     551    End Sub
     552
     553    Sub FillEllipse(brush As Brush, ByRef rect As Rectangle)
     554        FillEllipse(brush, rect.X, rect.Y, rect.Width, rect.Height)
     555    End Sub
     556
     557    Sub FillEllipse(brush As Brush, x As Long, y As Long, width As Long, height As Long)
     558        SetStatus(GdipFillEllipseI(nativeGraphics, brush.nativeBrush, x, y, width, height))
     559    End Sub
     560
     561    Sub FillPie(brush As Brush, ByRef rect As RectangleF, startAngle As Single, sweepAngle As Single)
     562        FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
     563    End Sub
     564
     565    Sub FillPie(brush As Brush, x As Single, y As Single, width As Single, height As Single, startAngle As Single, sweepAngle As Single)
     566        SetStatus(GdipFillPie(nativeGraphics, brush.nativeBrush, x, y, width, height, startAngle, sweepAngle))
     567    End Sub
     568
     569    Sub FillPie(brush As Brush, ByRef rect As Rectangle, startAngle As Single, sweepAngle As Single)
     570        FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle)
     571    End Sub
     572
     573    Sub FillPie(brush As Brush, x As Long, y As Long, width As Long, height As Long, startAngle As Single, sweepAngle As Single)
     574        SetStatus(GdipFillPieI(nativeGraphics, brush.nativeBrush, x, y, width, height, startAngle, sweepAngle))
     575    End Sub
     576
     577    Sub FillPath(brush As Brush, path As GraphicsPath)
     578        If ActiveBasic.IsNothing(brush) Or ActiveBasic.IsNothing(path) Then
     579            Throw New ArgumentNullException("brush or path or both")
    710580        End If
    711         Dim nativeFormat As *GpStringFormat
    712         If VarPtr(layoutRect) <> 0 Then
    713             nativeFormat = layoutRect.nativeFormat
    714         Else
    715             nativeFormat = 0
     581        SetStatus(GdipFillPath(nativeGraphics, brush.nativeBrush, path.nativePath))
     582    End Sub
     583
     584    Sub FillClosedCurve(brush As Brush, points As *PointF, count As Long)
     585        SetStatus(GdipFillClosedCurve(nativeGraphics, brush.nativeBrush, points, count))
     586    End Sub
     587
     588    Sub FillClosedCurve(brush As Brush, points As *PointF, count As Long, fillMode As Drawing2D.FillMode)
     589        SetStatus(GdipFillClosedCurve2(nativeGraphics, brush.nativeBrush, points, count, 0.5, fillMode))
     590    End Sub
     591
     592    Sub FillClosedCurve(brush As Brush, points As *PointF, count As Long, fillMode As Drawing2D.FillMode, tension As Single)
     593        SetStatus(GdipFillClosedCurve2(nativeGraphics, brush.nativeBrush, points, count, tension, fillMode))
     594    End Sub
     595
     596    Sub FillClosedCurve(brush As Brush, points As *Point, count As Long)
     597        SetStatus(GdipFillClosedCurveI(nativeGraphics, brush.nativeBrush, points, count))
     598    End Sub
     599
     600    Sub FillClosedCurve(brush As Brush, points As *Point, count As Long, fillMode As Drawing2D.FillMode)
     601        SetStatus(GdipFillClosedCurve2I(nativeGraphics, brush.nativeBrush, points, count, 0.5, fillMode))
     602    End Sub
     603
     604    Sub FillClosedCurve(brush As Brush, points As *Point, count As Long, fillMode As Drawing2D.FillMode, tension As Single)
     605        SetStatus(GdipFillClosedCurve2I(nativeGraphics, brush.nativeBrush, points, count, tension, fillMode))
     606    End Sub
     607
     608    Sub FillRegion(brush As Brush, region As Region)
     609        SetStatus(GdipFillRegion(nativeGraphics, brush.nativeBrush, region.nativeRegion))
     610    End Sub
     611
     612'DrawStringは次の組み合わせからなる。
     613'(PCWSTR, Long) or String
     614'PointF or (Single, Single) or Rectangle
     615'StringFormatの有無
     616    Sub DrawString(str As PCWSTR, length As Long, font As Font, brush As Brush, ByRef origin As PointF, stringFormat = Nothing As StringFormat)
     617        DrawString(str, length, font, brush, origin.X, origin.Y, stringFormat)
     618    End Sub
     619
     620    Sub DrawString(str As PCWSTR, length As Long, font As Font, brush As Brush, x As Single, y As Single, stringFormat = Nothing As StringFormat)
     621        Dim rc As RectangleF
     622        rc.X = x
     623        rc.Y = y
     624        rc.Width = 0
     625        rc.Height = 0
     626        DrawString(str, length, font, brush, rc, stringFormat)
     627    End Sub
     628
     629    Sub DrawString(str As PCWSTR, length As Long, font As Font, brush As Brush, ByRef layoutRect As RectangleF, stringFormat = Nothing As StringFormat)
     630        Dim nativeFont = getNativeFont(font)
     631        Dim nativeFormat = getNativeStringFormat(stringFormat)
     632        Dim nativeBrush = getNativeBrush(brush)
     633        SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, layoutRect, nativeFormat, nativeBrush))
     634    End Sub
     635
     636    Sub DrawString(s As String, font As Font, brush As Brush, ByRef origin As PointF, stringFormat = Nothing As StringFormat)
     637        DrawString(s, font, brush, origin.X, origin.Y, stringFormat)
     638    End Sub
     639
     640    Sub DrawString(s As String, font As Font, brush As Brush, x As Single, y As Single, stringFormat = Nothing As StringFormat)
     641        Dim rc As RectangleF
     642        rc.X = x
     643        rc.Y = y
     644        rc.Width = 0
     645        rc.Height = 0
     646        DrawString(s, font, brush, rc, stringFormat)
     647    End Sub
     648
     649    Sub DrawString(s As String, font As Font, brush As Brush, ByRef layoutRect As RectangleF, stringFormat = Nothing As StringFormat)
     650        Dim wcs As PCWSTR
     651        Dim len = GetStr(s, wcs) As Long
     652        DrawString(wcs, len As Long, font, brush, layoutRect, stringFormat)
     653    End Sub
     654
     655    Function MeasureString(s As String, font As Font) As SizeF
     656        Dim pt As PointF
     657        MeasureString = MeasureString(s, font, pt, Nothing)
     658    End Function
     659
     660    Function MeasureString(s As String, font As Font, ByRef layoutRectSize As SizeF) As SizeF
     661        MeasureString = MeasureString(s, font, layoutRectSize, Nothing)
     662    End Function
     663
     664    Function MeasureString(s As String, font As Font, ByRef layoutRectSize As SizeF, stringFormat As StringFormat) As SizeF
     665        Dim wcs As PCWSTR
     666        Dim len = GetStr(s, wcs) As Long
     667        MeasureString = MeasureString(wcs, len, font, layoutRectSize, stringFormat)
     668    End Function
     669
     670    Function MeasureString(s As String, font As Font, ByRef origin As PointF, stringFormat As StringFormat) As SizeF
     671        Dim wcs As PCWSTR
     672        Dim len = GetStr(s, wcs) As Long
     673        MeasureString = MeasureString(wcs, len, font, origin, stringFormat)
     674    End Function
     675
     676    Function MeasureString(s As String, font As Font, width As Long, stringFormat As StringFormat) As SizeF
     677        Dim wcs As PCWSTR
     678        Dim len = GetStr(s, wcs) As Long
     679        MeasureString = MeasureString(wcs, len, font, width, stringFormat)
     680    End Function
     681
     682    Function MeasureString(s As String, font As Font, ByRef layoutRectSize As SizeF, stringFormat As StringFormat, ByRef codepointsFitted As Long, ByRef linesFilled As Long) As SizeF
     683        Dim wcs As PCWSTR
     684        Dim len = GetStr(s, wcs) As Long
     685        MeasureString = MeasureString(wcs, len, font, layoutRectSize, stringFormat, codepointsFitted, linesFilled)
     686    End Function
     687
     688    Function MeasureString(str As PCWSTR, length As Long, font As Font) As SizeF
     689        Dim pt As PointF
     690        MeasureString = MeasureString(str, length, font, pt, Nothing)
     691    End Function
     692
     693    Function MeasureString(str As PCWSTR, length As Long, font As Font, ByRef layoutRectSize As SizeF) As SizeF
     694        MeasureString = MeasureString(str, length, font, layoutRectSize, Nothing)
     695    End Function
     696
     697    Function MeasureString(str As PCWSTR, length As Long, font As Font, ByRef layoutRectSize As SizeF, stringFormat As StringFormat) As SizeF
     698        MeasureString = measureStringPt(str, length, font, layoutRectSize, stringFormat, 0, 0)
     699    End Function
     700
     701    Function MeasureString(str As PCWSTR, length As Long, font As Font, ByRef origin As PointF, stringFormat As StringFormat) As SizeF
     702        Dim layoutRect As RectangleF
     703        With layoutRect
     704            .X = origin.X
     705            .Y = origin.Y
     706            .Width = 0
     707            .Height = 0
     708        End With
     709        MeasureString = measureString(str, length, font, layoutRect, stringFormat, 0, 0)
     710    End Function
     711
     712    Function MeasureString(str As PCWSTR, length As Long, font As Font, width As Long, stringFormat As StringFormat) As SizeF
     713        Dim layoutRect As RectangleF
     714        With layoutRect
     715            .X = 0
     716            .Y = 0
     717            .Width = width
     718            .Height = 0
     719        End With
     720        MeasureString = measureString(str, length, font, layoutRect, stringFormat, 0, 0)
     721    End Function
     722
     723    Function MeasureString(str As PCWSTR, length As Long, font As Font, ByRef layoutRectSize As SizeF, stringFormat As StringFormat, ByRef codepointsFitted As Long, ByRef linesFilled As Long) As SizeF
     724        MeasureString = measureStringPt(str, length, font, layoutRectSize, stringFormat, VarPtr(codepointsFitted), VarPtr(linesFilled))
     725    End Function
     726
     727Private
     728    Function measureStringPt(str As PCWSTR, length As Long, font As Font, ByRef layoutRectSize As SizeF, stringFormat As StringFormat, codepointsFitted As *Long, linesFilled As *Long) As SizeF
     729        Dim layoutRect As RectangleF
     730        With layoutRect
     731            .X = 0
     732            .Y = 0
     733            .Width = layoutRectSize.Width
     734            .Height = layoutRectSize.Height
     735        End With
     736        measureStringPt = measureString(str, length, font, layoutRect, stringFormat, codepointsFitted, linesFilled)
     737    End Function
     738
     739    Function measureString(str As PCWSTR, length As Long, font As Font, ByRef layoutRect As RectangleF, stringFormat As StringFormat, codepointsFitted As *Long, linesFilled As *Long) As SizeF
     740        Dim nativeFont = getNativeFont(font)
     741        Dim nativeFormat = getNativeStringFormat(stringFormat)
     742        Dim boundingBox As RectangleF
     743        SetStatus(GdipMeasureString(nativeGraphics, str, length, nativeFont, layoutRect, nativeFormat, boundingBox, codepointsFitted, linesFilled))
     744        measureString.Width = boundingBox.Width
     745        measureString.Height = boundingBox.Height
     746    End Function
     747
     748Public
     749
     750    Function MeasureCharacterRanges(s As String, font As Font, ByRef layoutRect As RectangleF, stringFormat As StringFormat) As System.Collections.Generic.IList<Region>
     751        Dim wcs As PCWSTR
     752        Dim len = GetStr(s, wcs)
     753        MeasureCharacterRanges = MeasureCharacterRanges(wcs, len, font, layoutRect, stringFormat)
     754    End Function
     755
     756    Function MeasureCharacterRanges(str As PCWSTR, length As Long, font As Font, ByRef layoutRect As RectangleF, stringFormat As StringFormat) As System.Collections.Generic.IList<Region>
     757        If ActiveBasic.IsNothing(stringFormat) Then
     758            stringFormat = New StringFormat
    716759        End If
    717         Return SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, layoutRect, nativeFormat, 0))
    718     End Function
    719 
    720     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, layoutRect As /*Const*/ RectangleF,
    721         stringFormat As /*Const*/ StringFormat, brush As /*Const*/ Brush) As Status
    722 
    723         Dim nativeFont As *GpFont
    724         If VarPtr(font) <> 0 Then
    725             nativeFont = font.nativeFormat
    726         Else
    727             nativeFont = 0
    728         End If
    729         Dim nativeFormat As *GpStringFormat
    730         If VarPtr(stringFormat) <> 0 Then
    731             nativeFormat = stringFormat.nativeFormat
    732         Else
    733             nativeFormat = 0
    734         End If
    735         Dim nativeBrush As *GpBrush
    736         If VarPtr(brush) <> 0 Then
    737             nativeBrush = brush.nativeFormat
    738         Else
    739             nativeBrush = 0
    740         End If
    741         Return SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, layoutRect, nativeFormat, nativeBrush))
    742     End Function
    743 
    744     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, origin As /*Const*/ Point) As Status
    745         Dim rect As RectangleF(origin.X, origin.Y, 0.0, 0.0)
    746         Dim nativeFont As *GpFont
    747         If VarPtr(font) <> 0 Then
    748             nativeFont = font.nativeFormat
    749         Else
    750             nativeFont = 0
    751         End If
    752         Return SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, rect, 0, 0))
    753     End Function
    754 
    755     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, origin As /*Const*/ PointF,
    756         brush As /*Const*/ Brush) As Status
    757 
    758         Dim rect As RectangleF(origin.X, origin.Y, 0.0, 0.0)
    759         Dim nativeFont As *GpFont
    760         If VarPtr(font) <> 0 Then
    761             nativeFont = font.nativeFormat
    762         Else
    763             nativeFont = 0
    764         End If
    765         Dim nativeBrush As *GpBrush
    766         If VarPtr(brush) <> 0 Then
    767             nativeBrush = brush.nativeFormat
    768         Else
    769             nativeBrush = 0
    770         End If
    771         Return SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, rect, 0, nativeBrush))
    772     End Function
    773 
    774     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, origin As /*Const*/ PointF) As Status
    775         Dim rect As RectangleF(origin.X, origin.Y, 0.0, 0.0)
    776         Dim nativeFont As *GpFont
    777         If VarPtr(font) <> 0 Then
    778             nativeFont = font.nativeFormat
    779         Else
    780             nativeFont = 0
    781         End If
    782         Return SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, rect, 0, 0))
    783     End Function
    784 
    785     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, origin As /*Const*/ PointF,
    786         stringFormat As /*Const*/ StringFormat) As Status
    787 
    788         Dim rect As RectangleF(origin.X, origin.Y, 0.0, 0.0)
    789         Dim nativeFont As *GpFont
    790         If VarPtr(font) <> 0 Then
    791             nativeFont = font.nativeFormat
    792         Else
    793             nativeFont = 0
    794         End If
    795         Dim nativeFormat As *GpStringFormat
    796         If VarPtr(stringFormat) <> 0 Then
    797             nativeFormat = stringFormat.nativeFormat
    798         Else
    799             nativeFormat = 0
    800         End If
    801         Return SetStatus(GdipDrawString(nativeGraphics, str, length, nativeFont, rect, nativeFormat, 0))
    802     End Function
    803 
    804     Function DrawString(str As PCWSTR, length As Long, font As /*Const*/ Font, origin As /*Const*/ PointF,
    805         stringFormat As /*Const*/ StringFormat, brush As /*Const*/ Brush) As Status
    806 
    807         Dim rect As RectangleF(origin.X, origin.Y, 0.0, 0.0)
    808         Dim nativeFont As *GpFont
    809         If VarPtr(font) <> 0 Then
    810             nativeFont = font.nativeFormat
    811         Else
    812             nativeFont = 0
    813         End If
    814         Dim nativeFormat As *GpStringFormat
    815         If VarPtr(stringFormat) <> 0 Then
    816             nativeFormat = stringFormat.nativeFormat
    817         Else
    818             nativeFormat = 0
    819         End If
    820         If VarPtr(brush) <> 0 Then
    821             nativeBrush = brush.nativeFormat
    822         Else
    823             nativeBrush = 0
    824         End If
    825         Return SetStatus(GdipDrawString( nativeGraphics, str, length, nativeFont, rect, nativeFormat, nativeBrush))
    826     End Function
    827 
    828     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font, layoutRect As /*Const*/ RectangleF,
    829         stringFormat As /*Const*/ StringFormat, boundingBox As RectangleF) As Status
    830 
    831         Return MeasureString(str, length, font, layoutRect, stringFormat, boundingBox, ByVal 0, ByVal 0)
    832     End Function
    833 
    834     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font, layoutRect As /*Const*/ RectangleF,
    835         stringFormat As /*Const*/ StringFormat, boundingBox As RectangleF,
    836         codepointsFitted As Long) As Status
    837 
    838         Return MeasureString(str, length, font, layoutRect, stringFormat, boundingBox, codepointsFitted, ByVal 0)
    839     End Function
    840 
    841     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font, layoutRect As /*Const*/ RectangleF,
    842         stringFormat As /*Const*/ StringFormat, boundingBox As RectangleF,
    843         codepointsFitted As Long, linesFilled As Long) As Status
    844 
    845         Dim nativeFont As *GpFont
    846         If VarPtr(font) <> 0 Then
    847             nativeFont = font.nativeFormat
    848         Else
    849             nativeFont = 0
    850         End If
    851         Dim nativeFormat As *GpStringFormat
    852         If VarPtr(stringFormat) <> 0 Then
    853             nativeFormat = stringFormat.nativeFormat
    854         Else
    855             nativeFormat = 0
    856         End If
    857         Return SetStatus(GdipMeasureString(nativeGraphics, str, length, nativeFont, layoutRect, nativeFormat,
    858             boundingBox, codepointsFitted, linesFilled))
    859     End Function
    860 
    861     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font,
    862         layoutRectSize As /*Const*/ SizeF, stringFormat As /*Const*/ StringFormat,
    863         size As SizeF) As Status
    864 
    865             Return MeasureString(str, length, font, layoutRectSize, stringFormat, size, ByVal 0, ByVal 0)
    866     End Function
    867 
    868     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font,
    869         layoutRectSize As /*Const*/ SizeF, stringFormat As /*Const*/ StringFormat,
    870         size As SizeF, codepointsFitted As Long) As Status
    871 
    872             Return MeasureString(str, length, font, layoutRectSize, stringFormat, size, codepointsFitted, ByVal 0)
    873     End Function
    874 
    875     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font,
    876         layoutRectSize As /*Const*/ SizeF, stringFormat As /*Const*/ StringFormat,
    877         size As SizeF, codepointsFitted As Long, linesFilled As Long) As Status
    878 
    879         Dim layoutRect As RectangleF(0, 0, layoutRectSize.Width, layoutRectSize.Height)
    880         Dim boundingBox As RectangleF, pBoundingBox As *RectangleF
    881         If VarPtr(size) <> 0 Then
    882             pBoundingBox = VarPtr(boundingBox)
    883         Else
    884             pBoundingBox = 0
    885         End If
    886 
    887         Dim nativeFont As *GpFont
    888         If VarPtr(font) <> 0 Then
    889             nativeFont = font.nativeFormat
    890         Else
    891             nativeFont = 0
    892         End If
    893         Dim nativeFormat As *GpStringFormat
    894         If VarPtr(stringFormat) <> 0 Then
    895             nativeFormat = stringFormat.nativeFormat
    896         Else
    897             nativeFormat = 0
    898         End If
    899         Dim status = SetStatus(GdipMeasureString(nativeGraphics, str, length,
    900             nativeFont, layoutRect, nativeFormat, pBoundingBox, codepointsFitted, linesFilled))
    901 
    902         If VarPtr(size) <> 0 And status = Status.Ok Then
    903             size.Width  = boundingBox.Width
    904             size.Height = boundingBox.Height
    905         End Function
    906 
    907         Return status
    908     End Function
    909 
    910     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font,
    911         origin As /*Const*/ PointF, stringFormat As /*Const*/ StringFormat,
    912         boundingBox As RectangleF) As Status
    913 
    914         Dim rect As RectangleF(origin.X, origin.Y, 0.0f, 0.0f)
    915         Dim nativeFont As *GpFont
    916         If VarPtr(font) <> 0 Then
    917             nativeFont = font.nativeFormat
    918         Else
    919             nativeFont = 0
    920         End If
    921         Dim nativeFormat As *GpStringFormat
    922         If VarPtr(stringFormat) <> 0 Then
    923             nativeFormat = stringFormat.nativeFormat
    924         Else
    925             nativeFormat = 0
    926         End If
    927 
    928         Return SetStatus(GdipMeasureString(nativeGraphics, str, length, nativeFont, rect, nativeFormat, boundingBox, 0, 0))
    929     End Function
    930 
    931     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font,
    932         layoutRect As /*Const*/ RectangleF, boundingBox As RectangleF) As Status
    933 
    934         Dim nativeFont As *GpFont
    935         If VarPtr(font) <> 0 Then
    936             nativeFont = font.nativeFormat
    937         Else
    938             nativeFont = 0
    939         End If
    940 
    941         Return SetStatus(GdipMeasureString(nativeGraphics, str, length, nativeFont, layoutRect, 0, boundingBox, 0, 0))
    942     End Function
    943 
    944     Const Function MeasureString(str As PCWSTR, length As Long, font As /*Const*/ Font,
    945         origin As /*Const*/ PointF, boundingBox As RectangleF) As Status
    946         Dim rect As RectangleF(origin.X, origin.Y, 0.0, 0.0)
    947 
    948         Dim nativeFont As *GpFont
    949         If VarPtr(font) <> 0 Then
    950             nativeFont = font.nativeFormat
    951         Else
    952             nativeFont = 0
    953         End If
    954         Return SetStatus(GdipMeasureString(nativeGraphics, str, length, nativeFont, rect, 0, boundingBox, 0, 0))
    955     End Function
    956 
    957     Const Function MeasureCharacterRanges(str As PCWSTR, length As Long, font As /*Const*/ Font,
    958         layoutRect As /*Const*/ RectangleF, stringFormat As /*Const*/ StringFormat,
    959         regionCount As Long, regions As *Region) As Status
    960         If regions = 0 Or regionCount <= 0 Then
    961             Return InvalidParameter
    962         End If
    963 
    964         Dim nativeRegions = _System_malloc(regionCount * SizeOf (GpRegion*)) As **GpRegion
    965 
    966         If nativeRegions = 0 Then
    967             Return OutOfMemory
    968         End If
     760        Dim count As Long
     761        SetStatus(GdipGetStringFormatMeasurableCharacterRangeCount(stringFormat.nativeFormat, count))
     762        Dim nativeRegions As **GpRegion 'ここで = GC_mallocとすると、エラーになる。
     763        nativeRegions = GC_malloc(count * SizeOf(*GpRegion))
     764        Dim regions = New System.Collections.Generic.List<Region>(count)
     765        MeasureCharacterRanges = regions
    969766
    970767        Dim i As Long
    971         For i = 0 To regionCount
    972             nativeRegions[i] = regions[i].nativeRegion
     768        For i = 0 To ELM(count)
     769            Dim t = regions[i]
     770            nativeRegions[i] = t.nativeRegion
    973771        Next
    974 
    975         Dim nativeFont As *GpFont
    976         If VarPtr(font) <> 0 Then
    977             nativeFont = font.nativeFormat
    978         Else
    979             nativeFont = 0
    980         End If
    981         Dim nativeFormat As *GpStringFormat
    982         If VarPtr(stringFormat) <> 0 Then
    983             nativeFormat = stringFormat.nativeFormat
    984         Else
    985             nativeFormat = 0
    986         End If
    987 
    988         Dim status = SetStatus(GdipMeasureCharacterRanges(nativeGraphics,
    989             str, length, nativeFont, layoutRect, nativeFormat,regionCount, nativeRegions))
    990         _System_free(nativeRegions)
    991         Return status
    992     End Function
    993 
    994     Function DrawDriverString(text As /*Const*/ Word, length As Long, font As /*Const*/ Font,
    995         brush As /*Const*/ Brush, positions As /*Const*/ *PointF, flags As Long) As Status
    996 
    997         Return DrawDriverString(text, length, font, brush, positions, flags, ByVal 0)
    998     End Function
    999 
    1000     Function DrawDriverString(text As /*Const*/ Word, length As Long, font As /*Const*/ Font,
    1001         brush As /*Const*/ Brush, positions As /*Const*/ *PointF, flags As Long, matrix As /*Const*/ Matrix) As Status
    1002 
    1003         Dim nativeFont As *GpFont
    1004         If VarPtr(font) <> 0 Then
    1005             nativeFont = font.nativeFormat
    1006         Else
    1007             nativeFont = 0
    1008         End If
    1009         Dim nativeBrush As *GpBrush
    1010         If VarPtr(brush) <> 0 Then
    1011             nativeBrush = brush.nativeBrush
    1012         Else
    1013             nativeBrush = 0
    1014         End If
    1015         Dim nativeMatrix As *GpMatrix
    1016         If VarPtr(matrix) <> 0 Then
    1017             nativeMatrix = matrix.nativeMatrix
    1018         Else
    1019             nativeMatrix = 0
    1020         End If
    1021         Return SetStatus(GdipDrawDriverString(nativeGraphics, text, length, nativeFont, nativeBrush, positions, flags, nativeMatrix))
    1022     End Function
    1023 
    1024     Const Function MeasureDriverString(text As /*Const*/ Word, length As Long, font As /*Const*/ Font,
    1025         positions As /*Const*/ *PointF, flags As Long, matrix As /*Const*/ Matrix, boundingBox As RectangleF) As Status
    1026 
    1027         Dim nativeFont As *GpFont
    1028         If VarPtr(font) <> 0 Then
    1029             nativeFont = font.nativeFormat
    1030         Else
    1031             nativeFont = 0
    1032         End If
    1033         Dim nativeMatrix As *GpMatrix
    1034         If VarPtr(matrix) <> 0 Then
    1035             nativeMatrix = matrix.nativeMatrix
    1036         Else
    1037             nativeMatrix = 0
    1038         End If
    1039         Return SetStatus(GdipMeasureDriverString(nativeGraphics, text, length, nativeFont, positions, flags, nativeMatrix, boundingBox))
    1040     End Function
    1041 
    1042     ' Draw a cached bitmap on this graphics destination offset by
    1043     ' x, y. Note this will fail with WrongState if the CachedBitmap
    1044     ' native format differs from this Graphics.
    1045 
    1046     Function DrawCachedBitmap(cb As CachedBitmap, x As Long, y As Long) As Status
    1047         Return SetStatus(GdipDrawCachedBitmap(nativeGraphics, cb->nativeCachedBitmap, x, y))
    1048     End Function
    1049 
    1050     Function DrawImage(image As Image, point As /*Const*/ PointF) As Status
    1051         Return DrawImage(image, point.X, point.Y)
    1052     End Function
    1053 
    1054     Function DrawImage(image As Image, x As Single, y As Single) As Status
    1055         Dim nativeImage As *GpImage
    1056         If VarPtr(image) <> 0 Then
    1057             nativeImage = image.NativeImage
    1058         Else
    1059             nativeImage = 0
    1060         End If
    1061         Return SetStatus(GdipDrawImage(nativeGraphics, nativeImage, x, y))
    1062     End Function
    1063 
    1064     Function DrawImage(image As Image, rect As /*Const*/ RectangleF) As Status
    1065         Return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height)
    1066     End Function
    1067 
    1068     Function DrawImage(image As Image, x As Single, y As Single, width As Single, height As Single) As Status
    1069         Dim nativeImage As *GpImage
    1070         If VarPtr(image) <> 0 Then
    1071             nativeImage = image.NativeImage
    1072         Else
    1073             nativeImage = 0
    1074         End If
    1075         Return SetStatus(GdipDrawImageRect(nativeGraphics, nativeImage, x, y, width, height))
    1076     End Function
    1077 
    1078     Function DrawImage(image As Image, point As /*Const*/ Point) As Status
    1079         Return DrawImage(image, point.X, point.Y) As Status
    1080     End Function
    1081 
    1082     Function DrawImage(image As Image, x As Long, y As Long) As Status
    1083         Dim nativeImage As *GpImage
    1084         If VarPtr(image) <> 0 Then
    1085             nativeImage = image.NativeImage
    1086         Else
    1087             nativeImage = 0
    1088         End If
    1089         Return SetStatus(GdipDrawImageI(nativeGraphics, nativeImage, x, y))
    1090     End Function
    1091 
    1092     Function DrawImage(image As Image, rect As /*Const*/ Rectangle) As Status
    1093         Return DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height)
    1094     End Function
    1095 
    1096     Function DrawImage(image As Image, x As Long, y As Long, width As Long, height As Long) As Status
    1097         Dim nativeImage As *GpImage
    1098         If VarPtr(image) <> 0 Then
    1099             nativeImage = image.NativeImage
    1100         Else
    1101             nativeImage = 0
    1102         End If
    1103         Return SetStatus(GdipDrawImageRectI(nativeGraphics, nativeImage, x, y, width, height))
    1104     End Function
     772        Dim nativeFont = getNativeFont(font)
     773        SetStatus(GdipMeasureCharacterRanges(nativeGraphics, str, length, nativeFont, layoutRect, stringFormat.nativeFormat, count, nativeRegions))
     774    End Function
     775
     776    'DrawDriverString
     777    'MeasureDriverString
     778
     779    Sub DrawCachedBitmap(cb As CachedBitmap, x As Long, y As Long)
     780        SetStatus(GdipDrawCachedBitmap(nativeGraphics, cb.nativeCachedBitmap, x, y))
     781    End Sub
     782
     783    Sub DrawImage(image As Image, ByRef point As PointF)
     784        DrawImage(image, point.X, point.Y)
     785    End Sub
     786
     787    Sub DrawImage(image As Image, x As Single, y As Single)
     788        Dim nativeImage = getNativeImage(image)
     789        SetStatus(GdipDrawImage(nativeGraphics, nativeImage, x, y))
     790    End Sub
     791
     792    Sub DrawImage(image As Image, ByRef rect As RectangleF)
     793        DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height)
     794    End Sub
     795
     796    Sub DrawImage(image As Image, x As Single, y As Single, width As Single, height As Single)
     797        Dim nativeImage = getNativeImage(image)
     798        SetStatus(GdipDrawImageRect(nativeGraphics, nativeImage, x, y, width, height))
     799    End Sub
     800
     801    Sub DrawImage(image As Image, ByRef point As Point)
     802        DrawImage(image, point.X, point.Y)
     803    End Sub
     804
     805    Sub DrawImage(image As Image, x As Long, y As Long)
     806        Dim nativeImage = getNativeImage(image)
     807        SetStatus(GdipDrawImageI(nativeGraphics, nativeImage, x, y))
     808    End Sub
     809
     810    Sub DrawImage(image As Image, ByRef rect As Rectangle)
     811        DrawImage(image, rect.X, rect.Y, rect.Width, rect.Height)
     812    End Sub
     813
     814    Sub DrawImage(image As Image, x As Long, y As Long, width As Long, height As Long)
     815        Dim nativeImage = getNativeImage(image)
     816        SetStatus(GdipDrawImageRectI(nativeGraphics, nativeImage, x, y, width, height))
     817    End Sub
    1105818
    1106819    ' Affine Draw Image
     
    1112825    '      destPoints[3] <=> bottom-right corner
    1113826
    1114     Function DrawImage(image As Image, destPoints As /*Const*/ PointF, count As Long) As Status
     827    Sub DrawImage(image As Image, destPoints As *PointF, count As Long)
    1115828        If count <> 3 And count <> 4 Then
    1116             Return SetStatus(InvalidParameter)
     829            SetStatus(InvalidParameter)
    1117830        End If
    1118831
    1119         Dim nativeImage As *GpImage
    1120         If VarPtr(image) <> 0 Then
    1121             nativeImage = image.NativeImage
    1122         Else
    1123             nativeImage = 0
     832        Dim nativeImage = getNativeImage(image)
     833        SetStatus(GdipDrawImagePoints(nativeGraphics, nativeImage, destPoints, count))
     834    End Sub
     835
     836    Sub DrawImage(image As Image, destPoints As *Point, count As Long)
     837        If count <> 3 And count <> 4 Then
     838            SetStatus(InvalidParameter)
    1124839        End If
    1125         Return SetStatus(GdipDrawImagePoints(nativeGraphics, nativeImage, destPoints, count))
    1126     End Function
    1127 
    1128     Function DrawImage(image As Image, destPoints As /*Const*/ Point, count As Long) As Status
    1129         If count <> 3 And count <> 4 Then
    1130             Return SetStatus(InvalidParameter)
    1131         End If
    1132 
    1133         Dim nativeImage As *GpImage
    1134         If VarPtr(image) <> 0 Then
    1135             nativeImage = image.NativeImage
    1136         Else
    1137             nativeImage = 0
    1138         End If
    1139         Return SetStatus(GdipDrawImagePointsI(nativeGraphics, nativeImage, destPoints, count))
    1140     End Function
    1141 
    1142     Function DrawImage(image As Image, x As Single, y As Single,
    1143         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit) As Status
    1144 
    1145         Dim nativeImage As *GpImage
    1146         If VarPtr(image) <> 0 Then
    1147             nativeImage = image.NativeImage
    1148         Else
    1149             nativeImage = 0
    1150         End If
    1151         Return SetStatus(GdipDrawImagePointRect(nativeGraphics, nativeImage, x, y, srcx, srcy, srcwidth, srcheight, srcUnit))
    1152     End Function
    1153 
    1154     Function DrawImage(image As Image, destRect As /*Const*/ RectangleF,
    1155         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit) As Status
    1156 
    1157         Return DrawImage(image, destRect, srcx, srcy, srcwidth, srcheight, srcUnit, 0, 0, 0)
    1158     End Function
    1159 
    1160     Function DrawImage(image As Image, destRect As /*Const*/ RectangleF,
     840
     841        Dim nativeImage = getNativeImage(image)
     842        SetStatus(GdipDrawImagePointsI(nativeGraphics, nativeImage, destPoints, count))
     843    End Sub
     844
     845    Sub DrawImage(image As Image, ByRef destRect As Rectangle, ByRef src As Rectangle, srcUnit As GraphicsUnit)
     846        DrawImage(image, destRect, src.X, src.Y, src.Width, src.Height, srcUnit)
     847    End Sub
     848
     849    Sub DrawImage(image As Image, ByRef destRect As RectangleF, ByRef src As RectangleF, srcUnit As GraphicsUnit)
     850        DrawImage(image, destRect, src.X, src.Y, src.Width, src.Height, srcUnit)
     851    End Sub
     852
     853    Sub DrawImage(image As Image, x As Long, y As Long, ByRef src As Rectangle, srcUnit As GraphicsUnit)
     854        Dim nativeImage = getNativeImage(image)
     855        SetStatus(GdipDrawImagePointRectI(nativeGraphics, nativeImage, x, y, src.X, src.Y, src.Width, src.Height, srcUnit))
     856    End Sub
     857
     858    Sub DrawImage(image As Image, x As Single, y As Single, ByRef src As RectangleF, srcUnit As GraphicsUnit)
     859        Dim nativeImage = getNativeImage(image)
     860        SetStatus(GdipDrawImagePointRect(nativeGraphics, nativeImage, x, y, src.X, src.Y, src.Width, src.Height, srcUnit))
     861    End Sub
     862
     863    Sub DrawImage(image As Image, destPoints As *Point, count As Long, ByRef src As Rectangle, srcUnit As GraphicsUnit, _
     864        imageAttr = Nothing As ImageAttributes, callback = Nothing As DrawImageAbort, callbackData = 0 As VoidPtr)
     865
     866        Dim nativeImage = getNativeImage(image)
     867        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     868        SetStatus(GdipDrawImagePointsRectI(nativeGraphics, nativeImage, destPoints, count,
     869            src.X, src.Y, src.Width, src.Height, srcUnit, nativeImageAttr, callback, callbackData))
     870    End Sub
     871
     872    Sub DrawImage(image As Image, destPoints As *PointF, count As Long, ByRef src As RectangleF, srcUnit As GraphicsUnit,
     873        imageAttr = Nothing As ImageAttributes, callback = Nothing As DrawImageAbort, callbackData = 0 As VoidPtr)
     874
     875        Dim nativeImage = getNativeImage(image)
     876        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     877        SetStatus(GdipDrawImagePointsRect(nativeGraphics, nativeImage, destPoints, count,
     878            src.X, src.Y, src.Width, src.Height, srcUnit, nativeImageAttr, callback, callbackData))
     879    End Sub
     880
     881    Sub DrawImage(image As Image, ByRef destRect As RectangleF,
    1161882        srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1162         imageAttributes As /*Const*/ ImageAttributes) As Status
    1163 
    1164         Return DrawImage(image, destRect, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, 0, 0)
    1165     End Function
    1166 
    1167     Function DrawImage(image As Image, destRect As /*Const*/ RectangleF,
    1168         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1169         imageAttributes As /*Const*/ ImageAttributes,
    1170         callback As DrawImageAbort) As Status
    1171 
    1172         Return DrawImage(image, destRect, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, callback, 0)
    1173     End Function
    1174 
    1175     Function DrawImage(image As Image, destRect As /*Const*/ RectangleF,
    1176         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1177         imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort, callbackData As VoidPtr) As Status
    1178 
    1179         Dim nativeImage As *GpImage
    1180         If VarPtr(image) <> 0 Then
    1181             nativeImage = image.NativeImage
    1182         Else
    1183             nativeImage = 0
    1184         End If
    1185         Dim nativeImageAttr As *GpImageAttributes
    1186         If VarPtr(imageAttributes) <> 0 Then
    1187             nativeImageAttr = image.NativeImageAttr
    1188         Else
    1189             nativeImageAttr = 0
    1190         End If
    1191 
    1192         Return SetStatus(GdipDrawImageRectRect(nativeGraphics, nativeImageAttr,
     883        imageAttr = Nothing As ImageAttributes, callback = Nothing As DrawImageAbort, callbackData = 0 As VoidPtr)
     884
     885        Dim nativeImage = getNativeImage(image)
     886        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     887        SetStatus(GdipDrawImageRectRect(nativeGraphics, nativeImageAttr,
    1193888            destRect.X, destRect.Y, destRect.Width, destRect.Height, srcx, srcy, srcwidth, srcheight,
    1194889            srcUnit, nativeImageAttr, callback, callbackData))
    1195     End Function
    1196 
    1197     Function DrawImage(image As Image, destPoints As /*Const*/ PointF, count As Long,
    1198         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit) As Status
    1199 
    1200         Return DrawImage(image, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, 0, 0, 0)
    1201     End Function
    1202 
    1203     Function DrawImage(image As Image, destPoints As /*Const*/ PointF, count As Long,
    1204         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1205         imageAttributes As /*Const*/ ImageAttributes) As Status
    1206 
    1207         Return DrawImage(image, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, 0, 0)
    1208     End Function
    1209 
    1210     Function DrawImage(image As Image, destPoints As /*Const*/ PointF, count As Long,
    1211         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1212         imageAttributes As /*Const*/ ImageAttributes,
    1213         callback As DrawImageAbort) As Status
    1214 
    1215         Return DrawImage(image, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, callback, 0)
    1216     End Function
    1217 
    1218     Function DrawImage(image As Image, destPoints As /*Const*/ PointF, count As Long,
    1219         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1220         imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort, callbackData As VoidPtr) As Status
    1221 
    1222         Dim nativeImage As *GpImage
    1223         If VarPtr(image) <> 0 Then
    1224             nativeImage = image.NativeImage
    1225         Else
    1226             nativeImage = 0
    1227         End If
    1228         Dim nativeImageAttr As *GpImageAttributes
    1229         If VarPtr(imageAttributes) <> 0 Then
    1230             nativeImageAttr = image.NativeImageAttr
    1231         Else
    1232             nativeImageAttr = 0
    1233         End If
    1234 
    1235         Return SetStatus(GdipDrawImagePointsRect(nativeGraphics, nativeImage, destPoints, count,
    1236             srcx, srcy, srcwidth, srcheight, srcUnit, nativeImageAttr, callback, callbackData))
    1237     End Function
    1238 
    1239     Function DrawImage(image As Image, x As Long, y As Long,
    1240         srcx As Long, srcy As Long, srcwidth As Long, srcheight As Long, srcUnit As GraphicsUnit) As Status
    1241 
    1242         Dim nativeImage As *GpImage
    1243         If VarPtr(image) <> 0 Then
    1244             nativeImage = image.NativeImage
    1245         Else
    1246             nativeImage = 0
    1247         End If
    1248         Return SetStatus(GdipDrawImagePointRectI(nativeGraphics, nativeImage, x, y, srcx, srcy, srcwidth, srcheight, srcUnit))
    1249     End Function
    1250 
    1251     Function DrawImage(image As Image, destRect As /*Const*/ Rectangle,
    1252         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit) As Status
    1253 
    1254         Return DrawImage(image, destRect, srcx, srcy, srcwidth, srcheight, srcUnit, 0, 0, 0)
    1255     End Function
    1256 
    1257     Function DrawImage(image As Image, destRect As /*Const*/ Rectangle,
    1258         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1259         imageAttributes As /*Const*/ ImageAttributes) As Status
    1260 
    1261         Return DrawImage(image, destRect, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, 0, 0)
    1262     End Function
    1263 
    1264     Function DrawImage(image As Image, destRect As /*Const*/ Rectangle,
    1265         srcx As Single, srcy As Single, srcwidth As Single, srcheight As Single, srcUnit As GraphicsUnit,
    1266         imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort) As Status
    1267 
    1268         Return DrawImage(image, destRect, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, callback, 0)
    1269     End Function
    1270 
    1271     Function DrawImage(image As Image, destRect As /*Const*/ Rectangle,
     890    End Sub
     891
     892    Sub DrawImage(image As Image, ByRef destRect As Rectangle,
    1272893        srcx As Long, srcy As Long, srcwidth As Long, srcheight As Long, srcUnit As GraphicsUnit,
    1273         imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort, callbackData As VoidPtr) As Status
    1274 
    1275         Dim nativeImage As *GpImage
    1276         If VarPtr(image) <> 0 Then
    1277             nativeImage = image.NativeImage
    1278         Else
    1279             nativeImage = 0
    1280         End If
    1281         Dim nativeImageAttr As *GpImageAttributes
    1282         If VarPtr(imageAttributes) <> 0 Then
    1283             nativeImageAttr = image.NativeImageAttr
    1284         Else
    1285             nativeImageAttr = 0
    1286         End If
    1287 
    1288         Return SetStatus(GdipDrawImageRectRectI(nativeGraphics, nativeImage,
     894        imageAttr = Nothing As ImageAttributes, callback = Nothing As DrawImageAbort, callbackData = 0 As VoidPtr)
     895
     896        Dim nativeImage = getNativeImage(image)
     897        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     898        SetStatus(GdipDrawImageRectRectI(nativeGraphics, nativeImage,
    1289899            destRect.X, destRect.Y, destRect.Width, destRect.Height,
    1290900            srcx, srcy, srcwidth, srcheight, srcUnit, nativeImageAttr, callback, callbackData))
    1291     End Function
    1292 
    1293     Function DrawImage(image As Image, destPoints As /*Const*/ Point, count As Long,
    1294         srcx As Long, srcy As Long, srcwidth As Long, srcheight As Long, srcUnit As GraphicsUnit) As Status
    1295 
    1296         Return DrawImage(image, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, 0, 0, 0)
    1297     End Function
    1298 
    1299     Function DrawImage(image As Image, destPoints As /*Const*/ Point, count As Long,
    1300         srcx As Long, srcy As Long, srcwidth As Long, srcheight As Long, srcUnit As GraphicsUnit,
    1301         imageAttributes As /*Const*/ ImageAttributes) As Status
    1302 
    1303         Return DrawImage(image, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, 0, 0)
    1304     End Function
    1305 
    1306     Function DrawImage(image As Image, destPoints As /*Const*/ Point, count As Long, _
    1307         srcx As Long, srcy As Long, srcwidth As Long, srcheight As Long, srcUnit As GraphicsUnit, _
    1308         imageAttributes As /*Const*/ ImageAttributes,
    1309         callback As DrawImageAbort) As Status
    1310 
    1311         Return DrawImage(image, destPoints, count, srcx, srcy, srcwidth, srcheight, srcUnit, imageAttributes, callback, 0)
    1312     End Function
    1313 
    1314     Function DrawImage(image As Image, destPoints As /*Const*/ Point, count As Long,
    1315         srcx As Long, srcy As Long, srcwidth As Long, srcheight As Long, srcUnit As GraphicsUnit,
    1316         imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort, callbackData As VoidPtr) As Status
    1317 
    1318         Dim nativeImage As *GpImage
    1319         If VarPtr(image) <> 0 Then
    1320             nativeImage = image.NativeImage
    1321         Else
    1322             nativeImage = 0
    1323         End If
    1324         Dim nativeImageAttr As *GpImageAttributes
    1325         If VarPtr(imageAttributes) <> 0 Then
    1326             nativeImageAttr = image.NativeImageAttr
    1327         Else
    1328             nativeImageAttr = 0
    1329         End If
    1330 
    1331         Return SetStatus(GdipDrawImagePointsRectI(nativeGraphics, nativeImage, destPoints, count,
    1332             srcx, srcy, srcwidth, srcheight, srcUnit, nativeImageAttr, callback, callbackData))
    1333     End Function
    1334 
    1335     Function DrawImage(image As Image, destPoints As /*Const*/ *Point, count As Long, srcRect As Rectangle, srcUnit As GraphicsUnit) As Status
    1336         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit)
    1337     End Function
    1338 
    1339     Function DrawImage(image As Image, destPoints As /*Const*/ *PointF, count As Long, srcRect As RectangleF, srcUnit As GraphicsUnit) As Status
    1340         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit)
    1341     End Function
    1342 
    1343     Function DrawImage(image As Image, x As Long, y As Long, srcRect As Rectangle, srcUnit As GraphicsUnit) As Status
    1344         Return DrawImage(image, x, y, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit)
    1345     End Function
    1346 
    1347     Function DrawImage(image As Image, x As Single, y As Single, srcRect As RectangleF, srcUnit As GraphicsUnit) As Status
    1348         Return DrawImage(image, x, y, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit)
    1349     End Function
    1350 
    1351     Function DrawImage(image As Image, destPoints As /*Const*/ *Point, count As Long, srcRect As Rectangle, srcUnit As GraphicsUnit, imageAttributes As /*Const*/ ImageAttributes) As Status
    1352         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, imageAttributes)
    1353     End Function
    1354 
    1355     Function DrawImage(image As Image, destPoints As /*Const*/ *PointF, count As Long, srcRect As RectangleF, srcUnit As GraphicsUnit, imageAttributes As /*Const*/ ImageAttributes) As Status
    1356         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, imageAttributes)
    1357     End Function
    1358 
    1359     Function DrawImage(image As Image, destPoints As /*Const*/ *Point, count As Long, srcRect As Rectangle, srcUnit As GraphicsUnit, imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort) As Status
    1360         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, imageAttributes, callback)
    1361     End Function
    1362 
    1363     Function DrawImage(image As Image, destPoints As /*Const*/ *PointF, count As Long, srcRect As RectangleF, srcUnit As GraphicsUnit, imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort) As Status
    1364         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, imageAttributes, callback)
    1365     End Function
    1366 
    1367     Function DrawImage(image As Image, destPoints As /*Const*/ *Point, count As Long, srcRect As Rectangle, srcUnit As GraphicsUnit, imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort, callbackData As VoidPtr) As Status
    1368         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, imageAttributes, callback, callbackData)
    1369     End Function
    1370 
    1371     Function DrawImage(image As Image, destPoints As /*Const*/ *PointF, count As Long, srcRect As RectangleF, srcUnit As GraphicsUnit, imageAttributes As /*Const*/ ImageAttributes, callback As DrawImageAbort, callbackData As VoidPtr) As Status
    1372         Return DrawImage(image, destPoints, count, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, imageAttributes, callback, callbackData)
    1373     End Function
    1374 
    1375     ' The following methods are for playing an EMF+ to a graphics
    1376     ' via the enumeration interface.  Each record of the EMF+ is
    1377     ' sent to the callback (along with the callbackData).   Then
    1378     ' the callback can invoke the Metafile::PlayRecord method
    1379     ' to play the particular record.
    1380 
    1381     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoint As /*Const*/ PointF,
    1382         callback As EnumerateMetafileProc) As Status
    1383 
    1384         Return EnumerateMetafile(metafile, destPoint, callback, 0, 0)
    1385     End Function
    1386 
    1387     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoint As /*Const*/ PointF,
    1388         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1389 
    1390         Return EnumerateMetafile(metafile, destPoint, callback, callbackData, 0)
    1391     End Function
    1392 
    1393     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoint As /*Const*/ PointF,
    1394         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1395 
    1396         Dim nativeImage As /*Const*/ *GpMetafile
    1397         If VarPtr(metafile) <> 0 Then
    1398             nativeImage = metafile.NativeImage
    1399         Else
    1400             nativeImage = 0
    1401         End If
    1402         Dim nativeImageAttr As *GpImageAttributes
    1403         If VarPtr(imageAttributes) <> 0 Then
    1404             nativeImageAttr = image.NativeImageAttr
    1405         Else
    1406             nativeImageAttr = 0
    1407         End If
    1408 
    1409         Return SetStatus(GdipEnumerateMetafileDestPoint(nativeGraphics,
    1410             nativeImage, destPoint, callback, callbackData,nativeImageAttr))
    1411     End Function
    1412 
    1413     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoint As /*Const*/ Point,
    1414         callback As EnumerateMetafileProc) As Status
    1415 
    1416         Return EnumerateMetafile(metafile, destPoint, callback, 0, 0)
    1417     End Function
    1418 
    1419     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoint As /*Const*/ Point,
    1420         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1421 
    1422         Return EnumerateMetafile(metafile, destPoint, callback, callbackData, 0)
    1423     End Function
    1424 
    1425     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoint As /*Const*/ Point,
    1426         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1427 
    1428         Dim nativeImage As /*Const*/ *GpMetafile
    1429         If VarPtr(metafile) <> 0 Then
    1430             nativeImage = metafile.NativeImage
    1431         Else
    1432             nativeImage = 0
    1433         End If
    1434         Dim nativeImageAttr As *GpImageAttributes
    1435         If VarPtr(imageAttributes) <> 0 Then
    1436             nativeImageAttr = image.NativeImageAttr
    1437         Else
    1438             nativeImageAttr = 0
    1439         End If
    1440 
    1441         Return SetStatus(GdipEnumerateMetafileDestPointI(nativeGraphics,
    1442             nativeImage, destPoint, callback, callbackData,nativeImageAttr))
    1443     End Function
    1444 
    1445     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destRect As /*Const*/ RectangleF,
    1446         callback As EnumerateMetafileProc) As Status
    1447 
    1448         Return EnumerateMetafile(metafile, destRect, callback, 0, 0)
    1449     End Function
    1450 
    1451     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destRect As /*Const*/ RectangleF,
    1452         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1453 
    1454         Return EnumerateMetafile(metafile, destRect, callback, callbackData, 0)
    1455     End Function
    1456 
    1457     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destRect As /*Const*/ RectangleF,
    1458         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1459 
    1460         Dim nativeImage As /*Const*/ *GpMetafile
    1461         If VarPtr(metafile) <> 0 Then
    1462             nativeImage = metafile.NativeImage
    1463         Else
    1464             nativeImage = 0
    1465         End If
    1466         Dim nativeImageAttr As *GpImageAttributes
    1467         If VarPtr(imageAttributes) <> 0 Then
    1468             nativeImageAttr = image.NativeImageAttr
    1469         Else
    1470             nativeImageAttr = 0
    1471         End If
    1472 
    1473         Return SetStatus(GdipEnumerateMetafileDestRect(nativeGraphics,
    1474             nativeImage, destRect, callback, callbackData, nativeImageAttr))
    1475     End Function
    1476 
    1477     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destRect As /*Const*/ Rectangle,
    1478         callback As EnumerateMetafileProc) As Status
    1479 
    1480         Return EnumerateMetafile(metafile, destRect, callback, 0, 0)
    1481     End Function
    1482 
    1483     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destRect As /*Const*/ Rectangle,
    1484         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1485 
    1486         Return EnumerateMetafile(metafile, destRect, callback, callbackData, 0)
    1487     End Function
    1488 
    1489     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destRect As /*Const*/ Rectangle,
    1490         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1491 
    1492         Dim nativeImage As /*Const*/ *GpMetafile
    1493         If VarPtr(metafile) <> 0 Then
    1494             nativeImage = metafile.NativeImage
    1495         Else
    1496             nativeImage = 0
    1497         End If
    1498         Dim nativeImageAttr As *GpImageAttributes
    1499         If VarPtr(imageAttributes) <> 0 Then
    1500             nativeImageAttr = image.NativeImageAttr
    1501         Else
    1502             nativeImageAttr = 0
    1503         End If
    1504 
    1505         Return SetStatus(GdipEnumerateMetafileDestRectI(nativeGraphics,
    1506             nativeImage, destRect, callback, callbackData, nativeImageAttr))
    1507     End Function
    1508 
    1509     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoints As /*Const*/ *PointF, count As Long,
    1510         callback As EnumerateMetafileProc) As Status
    1511 
    1512         Return EnumerateMetafile(metafile, destPoints, count, callback, 0, 0)
    1513     End Function
    1514 
    1515     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoints As /*Const*/ *PointF, count As Long,
    1516         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1517 
    1518         Return EnumerateMetafile(metafile, destPoints, count, callback, callbackData, 0)
    1519     End Function
    1520 
    1521     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoints As /*Const*/ *PointF, count As Long,
    1522         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1523 
    1524         Dim nativeImage As /*Const*/ *GpMetafile
    1525         If VarPtr(metafile) <> 0 Then
    1526             nativeImage = metafile.NativeImage
    1527         Else
    1528             nativeImage = 0
    1529         End If
    1530         Dim nativeImageAttr As *GpImageAttributes
    1531         If VarPtr(imageAttributes) <> 0 Then
    1532             nativeImageAttr = image.NativeImageAttr
    1533         Else
    1534             nativeImageAttr = 0
    1535         End If
    1536 
    1537         Return SetStatus(GdipEnumerateMetafileDestPoints(nativeGraphics,
    1538             nativeImage,destPoints, count, callback, callbackData, nativeImageAttr))
    1539     End Function
    1540 
    1541     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoints As /*Const*/ *Point, count As Long,
    1542         callback As EnumerateMetafileProc) As Status
    1543 
    1544         Return EnumerateMetafile(metafile, destPoints, count, callback, 0, 0)
    1545     End Function
    1546 
    1547     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoints As /*Const*/ *Point, count As Long,
    1548         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1549 
    1550         Return EnumerateMetafile(metafile, destPoints, count, callback, callbackData, 0)
    1551     End Function
    1552 
    1553     Function EnumerateMetafile(metafile As /*Const*/ Metafile, destPoints As /*Const*/ *Point, count As Long,
    1554         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1555 
    1556         Dim nativeImage As /*Const*/ *GpMetafile
    1557         If VarPtr(metafile) <> 0 Then
    1558             nativeImage = metafile.NativeImage
    1559         Else
    1560             nativeImage = 0
    1561         End If
    1562         Dim nativeImageAttr As *GpImageAttributes
    1563         If VarPtr(imageAttributes) <> 0 Then
    1564             nativeImageAttr = image.NativeImageAttr
    1565         Else
    1566             nativeImageAttr = 0
    1567         End If
    1568 
    1569         Return SetStatus(GdipEnumerateMetafileDestPointsI(nativeGraphics,
    1570             nativeImage,destPoints, count, callback, callbackData, nativeImageAttr))
    1571     End Function
    1572 
    1573     Function EnumerateMetafile(metafile As /*Const*/ Metafile,
    1574         destPoint As /*Const*/ PointF, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit,
    1575         callback As EnumerateMetafileProc) As Status
    1576 
    1577         Return EnumerateMetafile(metafile, destPoint, count, srcUnit, callback, 0, 0)
    1578     End Function
    1579 
    1580     Function EnumerateMetafile(metafile As /*Const*/ Metafile,
    1581         destPoint As /*Const*/ PointF, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit,
    1582         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1583 
    1584         Return EnumerateMetafile(metafile, destPoint, srcRect, srcUnit, callback, callbackData, 0)
    1585     End Function
    1586 
    1587     Function EnumerateMetafile(metafile As /*Const*/ Metafile,
    1588         destPoint As /*Const*/ PointF, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit,
    1589         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1590 
    1591         Dim nativeImage As /*Const*/ *GpMetafile
    1592         If VarPtr(metafile) <> 0 Then
    1593             nativeImage = metafile.NativeImage
    1594         Else
    1595             nativeImage = 0
    1596         End If
    1597         Dim nativeImageAttr As *GpImageAttributes
    1598         If VarPtr(imageAttributes) <> 0 Then
    1599             nativeImageAttr = image.NativeImageAttr
    1600         Else
    1601             nativeImageAttr = 0
    1602         End If
    1603 
    1604         Return SetStatus(GdipEnumerateMetafileSrcRectDestPoint(nativeGraphics, _
    1605             nativeImage, destPoint, srcRect, srcUnit, callback, callbackData, nativeImageAttr))
    1606     End Function
    1607 
    1608     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1609         destPoint As /*Const*/ Point, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1610         callback As EnumerateMetafileProc) As Status
    1611 
    1612         Return EnumerateMetafile(metafile, destPoint, count, srcUnit, callback, 0, 0)
    1613     End Function
    1614 
    1615     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1616         destPoint As /*Const*/ Point, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1617         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1618 
    1619         Return EnumerateMetafile(metafile, destPoint, srcRect, srcUnit, callback, callbackData, 0)
    1620     End Function
    1621 
    1622     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1623         destPoint As /*Const*/ Point, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1624         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1625 
    1626         Dim nativeImage As /*Const*/ *GpMetafile
    1627         If VarPtr(metafile) <> 0 Then
    1628             nativeImage = metafile.NativeImage
    1629         Else
    1630             nativeImage = 0
    1631         End If
    1632         Dim nativeImageAttr As *GpImageAttributes
    1633         If VarPtr(imageAttributes) <> 0 Then
    1634             nativeImageAttr = image.NativeImageAttr
    1635         Else
    1636             nativeImageAttr = 0
    1637         End If
    1638 
    1639         Return SetStatus(GdipEnumerateMetafileSrcRectDestPointI(nativeGraphics, _
    1640             nativeImage, destPoint, srcRect, srcUnit, callback, callbackData, nativeImageAttr))
    1641     End Function
    1642 
    1643     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1644         destRect As /*Const*/ RectangleF, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit, _
    1645         callback As EnumerateMetafileProc) As Status
    1646 
    1647         Return EnumerateMetafile(metafile, destRect, count, srcUnit, callback, 0, 0)
    1648     End Function
    1649 
    1650     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1651         destRect As /*Const*/ RectangleF, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit, _
    1652         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1653 
    1654         Return EnumerateMetafile(metafile, destRect, srcRect, srcUnit, callback, callbackData, 0)
    1655     End Function
    1656 
    1657     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1658         destRect As /*Const*/ RectangleF, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit, _
    1659         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1660 
    1661         Dim nativeImage As /*Const*/ *GpMetafile
    1662         If VarPtr(metafile) <> 0 Then
    1663             nativeImage = metafile.NativeImage
    1664         Else
    1665             nativeImage = 0
    1666         End If
    1667         Dim nativeImageAttr As *GpImageAttributes
    1668         If VarPtr(imageAttributes) <> 0 Then
    1669             nativeImageAttr = image.NativeImageAttr
    1670         Else
    1671             nativeImageAttr = 0
    1672         End If
    1673 
    1674         Return SetStatus(GdipEnumerateMetafileSrcRectDestRect(nativeGraphics, _
    1675             nativeImage, destRect, srcRect, srcUnit, callback, callbackData, nativeImageAttr))
    1676     End Function
    1677 
    1678     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1679         destRect As /*Const*/ Rectangle, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1680         callback As EnumerateMetafileProc) As Status
    1681 
    1682         Return EnumerateMetafile(metafile, destRect, srcRect, srcUnit, callback, 0, 0)
    1683     End Function
    1684 
    1685     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1686         destRect As /*Const*/ Rectangle, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1687         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1688 
    1689         Return EnumerateMetafile(metafile, destRect, srcRect, srcUnit, callback, callbackData, 0)
    1690     End Function
    1691 
    1692     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1693         destRect As /*Const*/ Rectangle, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1694         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1695 
    1696         Dim nativeImage As /*Const*/ *GpMetafile
    1697         If VarPtr(metafile) <> 0 Then
    1698             nativeImage = metafile.NativeImage
    1699         Else
    1700             nativeImage = 0
    1701         End If
    1702         Dim nativeImageAttr As *GpImageAttributes
    1703         If VarPtr(imageAttributes) <> 0 Then
    1704             nativeImageAttr = image.NativeImageAttr
    1705         Else
    1706             nativeImageAttr = 0
    1707         End If
    1708 
    1709         Return SetStatus(GdipEnumerateMetafileSrcRectDestRectI(nativeGraphics, _
    1710             nativeImage, destRect, srcRect, srcUnit, callback, callbackData, nativeImageAttr))
    1711     End Function
    1712 
    1713     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1714         destPoints As /*Const*/ *PointF, count As Long, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit, _
    1715         callback As EnumerateMetafileProc) As Status
    1716 
    1717         Return EnumerateMetafile(metafile, destPoints, count, srcRect, srcUnit, callback, 0, 0)
    1718     End Function
    1719 
    1720     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1721         destPoints As /*Const*/ *PointF, count As Long, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit, _
    1722         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1723 
    1724         Return EnumerateMetafile(metafile, destPoints, count, srcRect, srcUnit, callback, callbackData, 0)
    1725     End Function
    1726 
    1727     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1728         destPoints As /*Const*/ *PointF, count As Long, srcRect As /*Const*/ RectangleF, srcUnit As GraphicsUnit, _
    1729         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1730 
    1731         Dim nativeImage As /*Const*/ *GpMetafile
    1732         If VarPtr(metafile) <> 0 Then
    1733             nativeImage = metafile.NativeImage
    1734         Else
    1735             nativeImage = 0
    1736         End If
    1737         Dim nativeImageAttr As *GpImageAttributes
    1738         If VarPtr(imageAttributes) <> 0 Then
    1739             nativeImageAttr = image.NativeImageAttr
    1740         Else
    1741             nativeImageAttr = 0
    1742         End If
    1743 
    1744         Return SetStatus(GdipEnumerateMetafileSrcRectDestPoints(nativeGraphics, _
    1745             nativeImage, destPoints, count, srcRect, srcUnit, callback, callbackData, nativeImageAttr))
    1746     End Function
    1747 
    1748     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1749         destPoints As /*Const*/ *Point, count As Long, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1750         callback As EnumerateMetafileProc) As Status
    1751 
    1752         Return EnumerateMetafile(metafile, destPoints, count, srcRect, srcUnit, callback, 0, 0)
    1753     End Function
    1754 
    1755     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1756         destPoints As /*Const*/ *Point, count As Long, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1757         callback As EnumerateMetafileProc, callbackData As VoidPtr) As Status
    1758 
    1759         Return EnumerateMetafile(metafile, destPoints, count, srcRect, srcUnit, callback, callbackData, 0)
    1760     End Function
    1761 
    1762     Function EnumerateMetafile(metafile As /*Const*/ Metafile, _
    1763         destPoints As /*Const*/ *Point, count As Long, srcRect As /*Const*/ Rectangle, srcUnit As GraphicsUnit, _
    1764         callback As EnumerateMetafileProc, callbackData As VoidPtr, imageAttributes As /*Const*/ ImageAttributes) As Status
    1765 
    1766         Dim nativeImage As /*Const*/ *GpMetafile
    1767         If VarPtr(metafile) <> 0 Then
    1768             nativeImage = metafile.NativeImage
    1769         Else
    1770             nativeImage = 0
    1771         End If
    1772         Dim nativeImageAttr As *GpImageAttributes
    1773         If VarPtr(imageAttributes) <> 0 Then
    1774             nativeImageAttr = image.NativeImageAttr
    1775         Else
    1776             nativeImageAttr = 0
    1777         End If
    1778 
    1779         Return SetStatus(GdipEnumerateMetafileSrcRectDestPointsI(nativeGraphics, nativeImage, _
    1780             destPoints, count, srcRect, srcUnit, callback, callbackData, nativeImageAttr))
    1781     End Function
    1782 
    1783     Function SetClip(g As /*Const*/ Graphics) As Status
    1784         Return SetClip(g, CombineMode.Replace)
    1785     End Function
    1786 
    1787     Function SetClip(rc As /*Const*/ RectangleF) As Status
    1788         Return SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, CombineMode.Replace))
    1789     End Function
    1790 
    1791     Function SetClip(rc As /*Const*/ Rectangle) As Status
    1792         Return SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, CombineMode.Replace))
    1793     End Function
    1794 
    1795     Function SetClip(path As /*Const*/ GraphicsPath) As Status
    1796         Return SetStatus(GdipSetClipPath(nativeGraphics, path->nativePath, CombineMode.Replace))
    1797     End Function
    1798 
    1799     Function SetClip(region As /*Const*/ Region) As Status
    1800         Return SetStatus(GdipSetClipRegion(nativeGraphics, region->nativeRegion, CombineMode.Replace))
    1801     End Function
    1802 
    1803     Function SetClip(g As /*Const*/ Graphics, combineMode As CombineMode) As Status
    1804         Return SetStatus(GdipSetClipGraphics(nativeGraphics, g->nativeGraphics, combineMode))
    1805     End Function
    1806 
    1807     Function SetClip(rc As /*Const*/ RectangleF, combineMode As CombineMode) As Status
    1808         Return SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, combineMode))
    1809     End Function
    1810 
    1811     Function SetClip(rc As /*Const*/ Rectangle, combineMode As CombineMode) As Status
    1812         Return SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, combineMode))
    1813     End Function
    1814 
    1815     Function SetClip(path As /*Const*/ GraphicsPath, combineMode As CombineMode) As Status
    1816         Return SetStatus(GdipSetClipPath(nativeGraphics, path->nativePath, combineMode))
    1817     End Function
    1818 
    1819     Function SetClip(region As /*Const*/ Region, combineMode As CombineMode) As Status
    1820         Return SetStatus(GdipSetClipRegion(nativeGraphics, region->nativeRegion, combineMode))
    1821     End Function
    1822 
    1823     ' This is different than the other SetClip methods because it assumes
    1824     ' that the HRGN is already in device units, so it doesn't transform
    1825     ' the coordinates in the HRGN.
    1826 
    1827     Function SetClip(hrgn As HRGN, combineMode As CombineMode /* = CombineModeReplace*/) As Status
    1828         Return SetStatus(GdipSetClipHrgn(nativeGraphics, hrgn, combineMode))
    1829     End Function
    1830 
    1831     Function IntersectClip(rc As /*Const*/ RectangleF) As Status
    1832         Return SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, CombineMode.Intersect))
    1833     End Function
    1834 
    1835     Function IntersectClip(rc As /*Const*/ Rectangle) As Status
    1836         Return SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, CombineMode.Intersect))
    1837     End Function
    1838 
    1839     Function IntersectClip(region As /*Const*/ Region) As Status
    1840         Return SetStatus(GdipSetClipRegion(nativeGraphics, region->nativeRegion, CombineMode.Intersect))
    1841     End Function
    1842 
    1843     Function ExcludeClip(rc As /*Const*/ RectangleF) As Status
    1844         Return SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, CombineMode.Exclude))
    1845     End Function
    1846 
    1847     Function ExcludeClip(rc As /*Const*/ Rectangle) As Status
    1848         Return SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, CombineMode.Exclude))
    1849     End Function
    1850 
    1851     Function ExcludeClip(region As /*Const*/ Region) As Status
    1852         Return SetStatus(GdipSetClipRegion(nativeGraphics, region->nativeRegion, CombineMode.Exclude))
    1853     End Function
    1854 
    1855     Function ResetClip() As Status
    1856         Return SetStatus(GdipResetClip(nativeGraphics))
    1857     End Function
    1858 
    1859     Function TranslateClip(dx As Single, dy As Single) As Status
    1860         Return SetStatus(GdipTranslateClip(nativeGraphics, dx, dy))
    1861     End Function
    1862 
    1863     Function TranslateClip(dx As Long, dy As Long) As Status
    1864         Return SetStatus(GdipTranslateClipI(nativeGraphics, dx, dy))
    1865     End Function
    1866 
    1867     Const Function GetClip(region As Region) As Status
    1868         Return SetStatus(GdipGetClip(nativeGraphics, region->nativeRegion))
    1869     End Function
    1870 
    1871     Const Function GetClipBounds(rc As RectangleF) As Status
    1872         Return SetStatus(GdipGetClipBounds(nativeGraphics, rc))
    1873     End Function
    1874 
    1875     Const Function GetClipBounds(rc As Rectangle) As Status
    1876         Return SetStatus(GdipGetClipBoundsI(nativeGraphics, rc))
    1877     End Function
    1878 
    1879     Const Function GetVisibleClipBounds(rc As RectangleF) As Status
    1880         Return SetStatus(GdipGetVisibleClipBounds(nativeGraphics, rc))
    1881     End Function
    1882 
    1883     Const Function GetVisibleClipBounds(rc As Rectangle) As Status
    1884         Return SetStatus(GdipGetVisibleClipBoundsI(nativeGraphics, rc))
    1885     End Function
    1886 
    1887     Const Function IsVisible(x As Long, y As Long) As BOOL
     901    End Sub
     902
     903    Sub EnumerateMetafile(metafile As Metafile, ByRef destPoint As PointF,
     904        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     905
     906        Dim nativeImage = getNativeImage(metafile)
     907        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     908        Dim procData As Detail.EnumerateMetafileProcData
     909        procData.Proc = callback
     910        procData.Data = callbackData
     911        SetStatus(GdipEnumerateMetafileDestPoint(nativeGraphics,
     912            nativeImage, destPoint, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     913    End Sub
     914
     915    Sub EnumerateMetafile(metafile As Metafile, ByRef destPoint As Point,
     916        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     917
     918        Dim nativeImage = getNativeImage(metafile)
     919        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     920        Dim procData As Detail.EnumerateMetafileProcData
     921        procData.Proc = callback
     922        procData.Data = callbackData
     923        SetStatus(GdipEnumerateMetafileDestPointI(nativeGraphics,
     924            nativeImage, destPoint, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     925    End Sub
     926
     927    Sub EnumerateMetafile(metafile As Metafile, ByRef destRect As RectangleF,
     928        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     929
     930        Dim nativeImage = getNativeImage(metafile)
     931        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     932        Dim procData As Detail.EnumerateMetafileProcData
     933        procData.Proc = callback
     934        procData.Data = callbackData
     935        SetStatus(GdipEnumerateMetafileDestRect(nativeGraphics,
     936            nativeImage, destRect, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     937    End Sub
     938
     939    Sub EnumerateMetafile(metafile As Metafile, ByRef destRect As Rectangle,
     940        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     941
     942        Dim nativeImage = getNativeImage(metafile)
     943        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     944        Dim procData As Detail.EnumerateMetafileProcData
     945        procData.Proc = callback
     946        procData.Data = callbackData
     947        SetStatus(GdipEnumerateMetafileDestRectI(nativeGraphics,
     948            nativeImage, destRect, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     949    End Sub
     950
     951    Sub EnumerateMetafile(metafile As Metafile, destPoints As *PointF, count As Long,
     952        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     953
     954        Dim nativeImage = getNativeImage(metafile)
     955        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     956        Dim procData As Detail.EnumerateMetafileProcData
     957        procData.Proc = callback
     958        procData.Data = callbackData
     959        SetStatus(GdipEnumerateMetafileDestPoints(nativeGraphics,
     960            nativeImage,destPoints, count, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     961    End Sub
     962
     963    Sub EnumerateMetafile(metafile As Metafile, destPoints As *Point, count As Long,
     964        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     965
     966        Dim nativeImage = getNativeImage(metafile)
     967        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     968        Dim procData As Detail.EnumerateMetafileProcData
     969        procData.Proc = callback
     970        procData.Data = callbackData
     971        SetStatus(GdipEnumerateMetafileDestPointsI(nativeGraphics,
     972            nativeImage,destPoints, count, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     973    End Sub
     974
     975    Sub EnumerateMetafile(metafile As Metafile,
     976        ByRef destPoint As PointF, ByRef srcRect As RectangleF, srcUnit As GraphicsUnit,
     977        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     978
     979        Dim nativeImage = getNativeImage(metafile)
     980        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     981        Dim procData As Detail.EnumerateMetafileProcData
     982        procData.Proc = callback
     983        procData.Data = callbackData
     984        SetStatus(GdipEnumerateMetafileSrcRectDestPoint(nativeGraphics,
     985            nativeImage, destPoint, srcRect, srcUnit, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     986    End Sub
     987
     988    Sub EnumerateMetafile(metafile As Metafile,
     989        ByRef destPoint As Point, ByRef srcRect As Rectangle, srcUnit As GraphicsUnit,
     990        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     991
     992        Dim nativeImage = getNativeImage(metafile)
     993        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     994        Dim procData As Detail.EnumerateMetafileProcData
     995        procData.Proc = callback
     996        procData.Data = callbackData
     997        SetStatus(GdipEnumerateMetafileSrcRectDestPointI(nativeGraphics,
     998            nativeImage, destPoint, srcRect, srcUnit, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     999    End Sub
     1000
     1001    Sub EnumerateMetafile(metafile As Metafile,
     1002        ByRef destRect As RectangleF, ByRef srcRect As RectangleF, srcUnit As GraphicsUnit,
     1003        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     1004
     1005        Dim nativeImage = getNativeImage(metafile)
     1006        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     1007        Dim procData As Detail.EnumerateMetafileProcData
     1008        procData.Proc = callback
     1009        procData.Data = callbackData
     1010        SetStatus(GdipEnumerateMetafileSrcRectDestRect(nativeGraphics,
     1011            nativeImage, destRect, srcRect, srcUnit, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     1012    End Sub
     1013
     1014    Sub EnumerateMetafile(metafile As Metafile,
     1015        ByRef destRect As Rectangle, ByRef srcRect As Rectangle, srcUnit As GraphicsUnit,
     1016        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     1017
     1018        Dim nativeImage = getNativeImage(metafile)
     1019        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     1020        Dim procData As Detail.EnumerateMetafileProcData
     1021        procData.Proc = callback
     1022        procData.Data = callbackData
     1023        SetStatus(GdipEnumerateMetafileSrcRectDestRectI(nativeGraphics,
     1024            nativeImage, destRect, srcRect, srcUnit, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     1025    End Sub
     1026
     1027    Sub EnumerateMetafile(metafile As Metafile,
     1028        destPoints As *PointF, count As Long, ByRef srcRect As RectangleF, srcUnit As GraphicsUnit,
     1029        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     1030
     1031        Dim nativeImage = getNativeImage(metafile)
     1032        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     1033        Dim procData As Detail.EnumerateMetafileProcData
     1034        procData.Proc = callback
     1035        procData.Data = callbackData
     1036        SetStatus(GdipEnumerateMetafileSrcRectDestPoints(nativeGraphics,
     1037            nativeImage, destPoints, count, srcRect, srcUnit, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     1038    End Sub
     1039
     1040    Sub EnumerateMetafile(metafile As Metafile,
     1041        destPoints As *Point, count As Long, ByRef srcRect As Rectangle, srcUnit As GraphicsUnit,
     1042        callback As EnumerateMetafileProc, callbackData = 0 As VoidPtr, imageAttr = Nothing As ImageAttributes)
     1043
     1044        Dim nativeImage = getNativeImage(metafile)
     1045        Dim nativeImageAttr = getNativeImageAttributes(imageAttr)
     1046        Dim procData As Detail.EnumerateMetafileProcData
     1047        procData.Proc = callback
     1048        procData.Data = callbackData
     1049        SetStatus(GdipEnumerateMetafileSrcRectDestPointsI(nativeGraphics, nativeImage,
     1050            destPoints, count, srcRect, srcUnit, AddressOf(Detail.NativeEnumerateMetafileProcEntry), VarPtr(procData), nativeImageAttr))
     1051    End Sub
     1052
     1053    Sub SetClip(g As Graphics)
     1054        SetClip(g, System.Drawing.Drawing2D.CombineMode.Replace)
     1055    End Sub
     1056
     1057    Sub SetClip(g As Graphics, combineMode As Drawing2D.CombineMode)
     1058        SetStatus(GdipSetClipGraphics(nativeGraphics, g.nativeGraphics, combineMode))
     1059    End Sub
     1060
     1061    Sub SetClip(ByRef rc As RectangleF)
     1062        SetClip(rc, System.Drawing.Drawing2D.CombineMode.Replace)
     1063    End Sub
     1064
     1065    Sub SetClip(ByRef rc As RectangleF, combineMode As Drawing2D.CombineMode)
     1066        SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, combineMode))
     1067    End Sub
     1068
     1069    Sub SetClip(ByRef rc As Rectangle)
     1070        SetClip(rc, System.Drawing.Drawing2D.CombineMode.Replace)
     1071    End Sub
     1072
     1073    Sub SetClip(ByRef rc As Rectangle, combineMode As Drawing2D.CombineMode)
     1074        SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, combineMode))
     1075    End Sub
     1076
     1077    Sub SetClip(path As GraphicsPath)
     1078        SetClip(path, System.Drawing.Drawing2D.CombineMode.Replace)
     1079    End Sub
     1080
     1081    Sub SetClip(path As GraphicsPath, combineMode As Drawing2D.CombineMode)
     1082        SetStatus(GdipSetClipPath(nativeGraphics, path.nativePath, combineMode))
     1083    End Sub
     1084
     1085    Sub SetClip(region As Region)
     1086        SetClip(region, System.Drawing.Drawing2D.CombineMode.Replace)
     1087    End Sub
     1088
     1089    Sub SetClip(region As Region, combineMode As Drawing2D.CombineMode)
     1090        SetStatus(GdipSetClipRegion(nativeGraphics, region.nativeRegion, combineMode))
     1091    End Sub
     1092
     1093    Sub SetClip(hrgn As HRGN)
     1094        SetClip(hrgn, System.Drawing.Drawing2D.CombineMode.Replace)
     1095    End Sub
     1096
     1097    Sub SetClip(hrgn As HRGN, combineMode As Drawing2D.CombineMode)
     1098        SetStatus(GdipSetClipHrgn(nativeGraphics, hrgn, combineMode))
     1099    End Sub
     1100
     1101    Sub IntersectClip(ByRef rc As RectangleF)
     1102        SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, System.Drawing.Drawing2D.CombineMode.Intersect))
     1103    End Sub
     1104
     1105    Sub IntersectClip(ByRef rc As Rectangle)
     1106        SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, System.Drawing.Drawing2D.CombineMode.Intersect))
     1107    End Sub
     1108
     1109    Sub IntersectClip(region As Region)
     1110        SetStatus(GdipSetClipRegion(nativeGraphics, region.nativeRegion, System.Drawing.Drawing2D.CombineMode.Intersect))
     1111    End Sub
     1112
     1113    Sub ExcludeClip(ByRef rc As RectangleF)
     1114        SetStatus(GdipSetClipRect(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, System.Drawing.Drawing2D.CombineMode.Exclude))
     1115    End Sub
     1116
     1117    Sub ExcludeClip(ByRef rc As Rectangle)
     1118        SetStatus(GdipSetClipRectI(nativeGraphics, rc.X, rc.Y, rc.Width, rc.Height, System.Drawing.Drawing2D.CombineMode.Exclude))
     1119    End Sub
     1120
     1121    Sub ExcludeClip(region As Region)
     1122        SetStatus(GdipSetClipRegion(nativeGraphics, region.nativeRegion, System.Drawing.Drawing2D.CombineMode.Exclude))
     1123    End Sub
     1124
     1125    Sub ResetClip()
     1126        SetStatus(GdipResetClip(nativeGraphics))
     1127    End Sub
     1128
     1129    Sub TranslateClip(dx As Single, dy As Single)
     1130        SetStatus(GdipTranslateClip(nativeGraphics, dx, dy))
     1131    End Sub
     1132
     1133    Sub TranslateClip(dx As Long, dy As Long)
     1134        SetStatus(GdipTranslateClipI(nativeGraphics, dx, dy))
     1135    End Sub
     1136
     1137    Const Function IsVisible(x As Long, y As Long) As Boolean
    18881138        Dim b = FALSE As BOOL
    18891139        SetStatus(GdipIsVisiblePointI(nativeGraphics, x, y, b))
    1890         Return b
    1891     End Function
    1892 
    1893     Const Function IsVisible(pt As /*Const*/ Point) As BOOL
    1894         Return IsVisible(pt.X, pt.Y)
    1895     End Function
    1896 
    1897     Const Function IsVisible(x As Long, y As Long, width As Long, height As Long) As BOOL
     1140        IsVisible = b As Boolean
     1141    End Function
     1142
     1143    Const Function IsVisible(ByRef pt As Point) As Boolean
     1144        IsVisible(pt.X, pt.Y)
     1145    End Function
     1146
     1147    Const Function IsVisible(x As Long, y As Long, width As Long, height As Long) As Boolean
    18981148        Dim b = FALSE As BOOL
    18991149        SetStatus(GdipIsVisibleRectI(nativeGraphics, x, y, width, height, b))
    1900         Return b
    1901     End Function
    1902 
    1903     Const Function IsVisible(rc As /*Const*/ Rectangle) As BOOL
    1904         Return IsVisible(rc.X, rc.Y, rc.Width, rc.Height)
    1905     End Function
    1906 
    1907     Const Function IsVisible(x As Single, y As Single) As BOOL
     1150        IsVisible = b As Boolean
     1151    End Function
     1152
     1153    Const Function IsVisible(ByRef rc As Rectangle) As Boolean
     1154        IsVisible = IsVisible(rc.X, rc.Y, rc.Width, rc.Height)
     1155    End Function
     1156
     1157    Const Function IsVisible(x As Single, y As Single) As Boolean
    19081158        Dim b = FALSE As BOOL
    19091159        SetStatus(GdipIsVisiblePoint(nativeGraphics, x, y, b))
    1910         Return b
    1911     End Function
    1912 
    1913     Const Function IsVisible(point As /*Const*/ PointF) As BOOL
    1914         Return IsVisible(pt.X, pt.Y)
    1915     End Function
    1916 
    1917     Const Function IsVisible(x As Single, y As Single, width As Single, height As Single) As BOOL
     1160        IsVisible = b As Boolean
     1161    End Function
     1162
     1163    Const Function IsVisible(ByRef pt As PointF) As Boolean
     1164        IsVisible = IsVisible(pt.X, pt.Y)
     1165    End Function
     1166
     1167    Const Function IsVisible(x As Single, y As Single, width As Single, height As Single) As Boolean
    19181168        Dim b = FALSE As BOOL
    19191169        SetStatus(GdipIsVisibleRect(nativeGraphics, x, y, width, height, b))
    1920         Return b
    1921     End Function
    1922 
    1923     Const Function IsVisible(rect As /*Const*/ RectangleF) As BOOL
    1924         Return IsVisible(rc.X, rc.Y, rc.Width, rc.Height)
    1925     End Function
    1926 
    1927     Const Function Save() As GraphicsState
    1928         Dim gstate As GraphicsState
    1929         SetStatus(GdipSaveGraphics(nativeGraphics, state))
    1930         Return gstate
    1931     End Function
    1932 
    1933     Function Restore(gstate As GraphicsState)
    1934         Return SetStatus(GdipRestoreGraphics(nativeGraphics, gstate))
    1935     End Function
    1936 
    1937     Function BeginContainer(dstrect As /*Const*/ RectangleF, srcrect As /*Const*/ RectangleF, unit As GraphicsUnit) As GraphicsContainer
    1938         Dim state As GraphicsContainer
    1939         SetStatus(GdipBeginContainer(nativeGraphics, dstrect, srcrect, unit, state))
    1940         Return state
    1941     End Function
    1942 
    1943     Function BeginContainer(dstrect As /*Const*/ Rectangle, srcrect As /*Const*/ Rectangle, unit As GraphicsUnit) As GraphicsContainer
    1944         Dim state As GraphicsContainer
    1945         SetStatus(GdipBeginContainerI(nativeGraphics, dstrect, srcrect, unit, state))
    1946         Return state
    1947     End Function
    1948 
    1949     Function BeginContainer() As GraphicsContainer
    1950         Dim state As GraphicsContainer
    1951         SetStatus(GdipBeginContainer2(nativeGraphics, state))
    1952         Return state
    1953     End Function
    1954 
    1955     Function EndContainer(state As GraphicsContainer) As Status
    1956         Return SetStatus(GdipEndContainer(nativeGraphics, state))
    1957     End Function
    1958 
    1959     ' Only valid when recording metafiles.
    1960 
    1961     Function AddMetafileComment(data As /*Const*/ *Byte, sizeData As DWord)
    1962         Return SetStatus(GdipComment(nativeGraphics, sizeData, data))
    1963     End Function
     1170        IsVisible = b As Boolean
     1171    End Function
     1172
     1173    Const Function IsVisible(ByRef rc As RectangleF) As Boolean
     1174        IsVisible = IsVisible(rc.X, rc.Y, rc.Width, rc.Height)
     1175    End Function
     1176
     1177    Const Function Save() As Drawing2D.GraphicsState
     1178        SetStatus(GdipSaveGraphics(nativeGraphics, Save))
     1179    End Function
     1180
     1181    Sub Restore(gstate As Drawing2D.GraphicsState)
     1182        SetStatus(GdipRestoreGraphics(nativeGraphics, gstate))
     1183    End Sub
     1184
     1185    Function BeginContainer(ByRef dstrect As RectangleF, ByRef srcrect As RectangleF, unit As GraphicsUnit) As Drawing2D.GraphicsContainer
     1186        SetStatus(GdipBeginContainer(nativeGraphics, dstrect, srcrect, unit, BeginContainer))
     1187    End Function
     1188
     1189    Function BeginContainer(ByRef dstrect As Rectangle, ByRef srcrect As Rectangle, unit As GraphicsUnit) As Drawing2D.GraphicsContainer
     1190        SetStatus(GdipBeginContainerI(nativeGraphics, dstrect, srcrect, unit, BeginContainer))
     1191    End Function
     1192
     1193    Function BeginContainer() As Drawing2D.GraphicsContainer
     1194        SetStatus(GdipBeginContainer2(nativeGraphics, BeginContainer))
     1195    End Function
     1196
     1197    Sub EndContainer(state As Drawing2D.GraphicsContainer)
     1198        SetStatus(GdipEndContainer(nativeGraphics, state))
     1199    End Sub
     1200
     1201    Sub AddMetafileComment(data As *Byte, sizeData As DWord)
     1202        SetStatus(GdipComment(nativeGraphics, sizeData, data))
     1203    End Sub
    19641204
    19651205    Static Function GetHalftonePalette() As HPALETTE
    1966         Return GdipCreateHalftonePalette()
    1967     End Function
    1968 
    1969     Const Function GetLastStatus() As Status
    1970         Dim lastStatus = lastResult
    1971         lastResult = Status.Ok
    1972         Return lastStatus
    1973     End Function
     1206        GdipCreateHalftonePalette()
     1207    End Function
     1208
     1209    Function NativeGraphics() As *GpGraphics
     1210        NativeGraphics = nativeGraphics
     1211    End Function
     1212
     1213    Sub Graphics(graphics As *GpGraphics)
     1214        nativeGraphics = graphics
     1215    End Sub
    19741216
    19751217Private
    1976 '   Sub Graphics(gr As Graphics)
    1977 '       Debug
    1978 '   End Sub
    1979     Sub Operator =(gr As Graphics)
    1980         Debug
    1981     End Sub
    1982 
    1983 Protected
    1984     Sub Graphics(graphics As *GpGraphics)
    1985         lastResult = Status.Ok
    1986         SetNativeGraphics(graphics)
    1987     End Sub
    1988 
    1989     Sub SetNativeGraphics(graphics As *GpGraphics)
    1990         This.nativeGraphics = graphics
    1991     End Sub
    1992 
    1993     Const Function SetStatus(status As Status) As Status
    1994         If status <> Status.Ok Then
    1995             lastResult = status
     1218    Static Function getNativePen(pen As Pen) As *GpPen
     1219        If ActiveBasic.IsNothing(pen) Then
     1220            getNativePen = 0
     1221        Else
     1222            getNativePen = pen.NativePen
    19961223        End If
    1997         Return status
    1998     End Function
    1999 
    2000     Const Function GetNativeGraphics() As *GpGraphics
    2001         Return This.nativeGraphics
    2002     End Function
    2003 
    2004     Function GetNativePen(pen As /*Const*/ *Pen) As *GpPen
    2005         Return pen->nativePen
    2006     End Function
    2007 
    2008 Protected
     1224    End Function
     1225
     1226    Static Function getNativeStringFormat(sf As StringFormat) As *GpStringFormat
     1227        If ActiveBasic.IsNothing(sf) Then
     1228            getNativeStringFormat = 0
     1229        Else
     1230            getNativeStringFormat = sf.nativeFormat
     1231        End If
     1232    End Function
     1233
     1234    Static Function getNativeBrush(br As Brush) As *GpBrush
     1235        If ActiveBasic.IsNothing(br) Then
     1236            getNativeBrush = 0
     1237        Else
     1238            getNativeBrush = br.nativeBrush
     1239        End If
     1240    End Function
     1241
     1242    Static Function getNativeFont(font As Font) As *GpFont
     1243        If ActiveBasic.IsNothing(font) Then
     1244            getNativeFont = 0
     1245        Else
     1246            getNativeFont = font.NativeFont
     1247        End If
     1248    End Function
     1249
     1250    Static Function getNativeImage(image As Image) As *GpImage
     1251        If ActiveBasic.IsNothing(image) Then
     1252            getNativeImage = 0
     1253        Else
     1254            getNativeImage = image.nativeImage
     1255        End If
     1256    End Function
     1257
     1258    Static Function getNativeImageAttributes(imageAttr As ImageAttributes) As *GpImageAttributes
     1259        If ActiveBasic.IsNothing(imageAttr) Then
     1260            getNativeImageAttributes = 0
     1261        Else
     1262            getNativeImageAttributes = imageAttr.nativeImage
     1263        End If
     1264    End Function
     1265
    20091266    nativeGraphics As *GpGraphics
    2010     lastResult As /*Mutable*/ Status
    20111267End Class
    20121268
Note: See TracChangeset for help on using the changeset viewer.