因为要使用SetROP2函数获得橡皮线效果,系统中使用了较多的API函数,除了SetROP2外,还包括CreatePen, CreateSolidBrush, GetStockObject, SelectObject, DeleteObject, MoveToEx,LineTo,Ellipse和Arc等,以及一个LPPOINT 结构。为了管理这些API函数,创建了一个Win32API类。关于API函数的声明和调用,请参见第3章的内容。需要注意的是,由于用到互操作,必须导入System.Runtime.InteropServices名字空间。Win32API类中用到的API函数的意义如表3-1所示。因为MoveToEx 等函数中要用到LPPOINT类型的参数,所以需要首先创建一个该类型的结构。
表3-1 Win32API类中声明的API函数的意义
\[\]
code.vb.net
Imports System.Runtime.InteropServices
Public Class Win32API
<StructLayout(LayoutKind.Sequential)> Public Structure LPPOINT
Public x As Long
Public y As Long
End Structure"
<DIIImport("gdi32.dll")>_
Public Shared Function SetROP2(ByVal hdc As IntPu,_
ByVal nDrawMode As Integer) As Boolean
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function CreatePen(ByVal nPenStyle As Integer,
By Val nWidth As Integer, ByVal crColor As Integer)_
As Long
End Function
<DIIlmport(\"gdi32.dIl)> Public Shared Punction CreateSolidBrush_
(ByVal crColor As Integer) As Long
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function GetStockObject(ByVal nIndex As Integer) As Long
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function SelectObjectByVal hdc As IntPtr,
ByVal hObject As Long) As Long
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function DeleteObject(ByVal hObject As Long) As Long
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function MoveToEx_
(ByVal hdc As IntPr, ByVal x As Integer, ByVal y As Integer,
ByVal lpPoint As LPPOINT) As Boolean
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function LineTo_
(ByVal hdc As IntPr,ByVal x As Integer,_
ByVal y As Integer) As Boolean
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function Rectangle
(ByVal hdc As IntPtr,ByVal X1 As Integer,ByVal Y1 As Integer,
ByVal X2 As Integer,ByVal Y2 As Integer)As Boolean
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function Ellipse_
(ByVal hdc As IntPtr,ByVal X1 As Integer,ByVal Y1 As Integer,
ByVal X2 As Integer,ByVal Y2 As Integer)As Boolean
End Function
<DIIImport("gdi32.dll")>_
Public Shared Function Arc.
(ByVal hdc As IntPtr,ByVal X1 As Integer,ByVal Y1 As Integer,_
ByVal X2 As Integer,ByVal Y2 As Integer,ByVal X3 As Integer,
ByVal Y3 As Integer,ByVal X4 As Integer,ByVal Y4 As Integer)As Boolean
End Function
End Class