CGElement类

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