CGElement类是图元基类,为抽象类。它定义了图元的公共属性,如颜色、线型、线宽等。geDrawMode枚举定义了正常、选择、拖曳和删除等4种绘图模式,对应于图元不同的显示效果。geStyle枚举定义图元的线型,有实线、虚线、点线等5种。
Draw方法是必须在派生类中重写的,它有两个参数:g为Graphics对象,指示绘图表面;aGrawMode 为geDrawMode枚举类型,表示以何种绘图模式绘图。
DrawSettings函数确定在不同绘图模式下用何种线条绘制图形。因为函数中用到了SetROP2函数,该函数有一个hdc参数,指示绘图环境的句柄,所以要传递一个hdc参数给它。调用DrawSet tings函数时, 用Grap ics .的GetHdc法可以获得该参数的值。 要注意的是,在这里,hdc参数为IntPtr类型,而不是VB6.0中的Long型。以正常模式绘图时,SetROP2函数的第2个参数的值设置为13(此时,钢笔的颜色覆盖背景色),用宽度为1的实线绘制,颜色为黑色:以选择模式绘图时,SetROP2函数的设置与上面的相同,用宽度为1的虚线绘制,颜色为红色;以拖曳模式绘图时,SetROP2函数的第2个参数的值设置为10,用反转方式画线,此时用宽度为1的实线画线,颜色为蓝色;以删除模式绘图时,SetROP2函数的设置与正常模式的相同,用宽度为1的实现绘制,颜色为白色。因为背景色设为白色,用白色重画图元实际上就将图元在屏幕上删除了。在VB.NET中,用RGB函数设置图元的颜色。该函数的3个参数分别为所设置的颜色的红色、绿色和蓝色分量。
code.vb.net
'图元基类
Public MustInherit Class CGElement
'绘图方式
Public Enum geDrawMode
Normal =1
Selec =2
Drag=3
Delete =4
End Enum
'图元的线型
Public Enum geStyle
Solid =1
Dash = 2
Dot =3
DashDot =4
DashDotDot=5
End Enum"
Private m_Color,m_Style,m_Width As Integer
'颜色属性
Public Property ColorO As Integer
Get
Return m Color
End Get
Set(By Val Value As Integer)
m_Color = Value
End Set
End Property
''线型属性
Public Property Style() As Integer
Get
Return m_Style
End Get
Set(ByVal Value As Integer)
m_Style = Value
End Set
End Property
'线宽属性
Public Property WidthO As Integer
Get
Return m Width
End Get
Set(ByVal Value As Integer)
m_Width= Value
End Set
End Property
'构造函数
Public Sub NewO
InitO
End Sub
'初始化图元
Protected Sub Init()
m_Style=0
m Width =1"
m_Color = RGB(0,0,0)
End Sub
'绘制图元
Public MustOverride Sub Draw(ByVal g As Graphics,_
By Val aGrawMode As geDrawMode)
'根据不同的绘图模式设置不同的绘图参数
Public Function DrawSettings(ByVal hdc As IntPtr,
By Val aDrawMode As geDrawMode) As Integer()
Dim penPara(2) As Integer
Select Case aDrawMode
Case geDrawMode.Normal
Win32API.SetROP2(hdc, 13)
m_Style=0
m_Width=1
m_Color = RGB(0,0,0)
Case geDrawMode.Selec
Win32API.SetROP2(hdc, 13)
m_Style=1
m_Width =1
m_Color = RGB(255,0,0)
Case geDrawMode.Drag
Win32API.SetROP2(hdc, 10)
m_Style =0
m_Width=1
m_Color = RGB(0, 0, 255)
Case geDrawMode.Delete
Win32API.SetROP2(hdc,13)
m_Style =0
m_Width=1
m_Color = RGB(255,255,255)
End Select
penPara(0)=m_Style
penPara(1)= m.Width
penPara(2)=m_Color
Return penPara
End Function
End Class