今天看了看IssueVision的源代码,把学习中的东西记录下来,以免忘掉了。

IssueVision的PaneCaption控件源码分析' Custom control that draws the caption for each pane. Contains an active 
IssueVision的PaneCaption控件源码分析'
 state and draws the caption different for each state. Caption is drawn
IssueVision的PaneCaption控件源码分析'
 with a gradient fill and antialias font.
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析
Imports System.Drawing.Drawing2D '使用GDI+绘制渐变背景和表面文字需要引用的类
IssueVision的PaneCaption控件源码分析
Imports System.ComponentModel
IssueVision的PaneCaption控件源码分析
 PaneCaption
IssueVision的PaneCaption控件源码分析    
Inherits System.Windows.Forms.UserControl
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' const values
IssueVision的PaneCaption控件源码分析
    '用来控制控件表面文字绘制的属性和控件默认的缺省属性
 Consts
IssueVision的PaneCaption控件源码分析        
Public Const DefaultHeight As Integer = 26
IssueVision的PaneCaption控件源码分析        
Public Const DefaultFontName As String = "Tahoma"
IssueVision的PaneCaption控件源码分析
        Public Const DefaultFontSize As Integer = 12
IssueVision的PaneCaption控件源码分析        
Public Const PosOffset As Integer = 4 '文字相对于容器的绘制坐标位移
IssueVision的PaneCaption控件源码分析
    End Class
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' internal members
IssueVision的PaneCaption控件源码分析
    Private m_active As Boolean = False '控件激活和无效两种状态控制
IssueVision的PaneCaption控件源码分析
    Private m_antiAlias As Boolean = True '用来控制控件表面文字的显示质量
IssueVision的PaneCaption控件源码分析
    Private m_allowActive As Boolean = True
IssueVision的PaneCaption控件源码分析    
Private m_text As String = ""
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析
    '两种状态默认文字、背景渐变颜色
IssueVision的PaneCaption控件源码分析
    Private m_colorActiveText As Color = Color.Black
IssueVision的PaneCaption控件源码分析    
Private m_colorInactiveText As Color = Color.White
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
Private m_colorActiveLow As Color = Color.FromArgb(25516578)
IssueVision的PaneCaption控件源码分析    
Private m_colorActiveHigh As Color = Color.FromArgb(255225155)
IssueVision的PaneCaption控件源码分析    
Private m_colorInactiveLow As Color = Color.FromArgb(355145)
IssueVision的PaneCaption控件源码分析    
Private m_colorInactiveHigh As Color = Color.FromArgb(90135215)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' gdi objects
IssueVision的PaneCaption控件源码分析
    '绘制显示效果的笔刷
IssueVision的PaneCaption控件源码分析
    Private m_brushActiveText As SolidBrush
IssueVision的PaneCaption控件源码分析    
Private m_brushInactiveText As SolidBrush
IssueVision的PaneCaption控件源码分析    
Private m_brushActive As LinearGradientBrush
IssueVision的PaneCaption控件源码分析    
Private m_brushInactive As LinearGradientBrush
IssueVision的PaneCaption控件源码分析    
Private m_format As StringFormat
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' public properties
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析    
' the caption of the control
IssueVision的PaneCaption控件源码分析
    '设置控件中的文本,并且在属性面板中可以选择
IssueVision的PaneCaption控件源码分析
    <Description("Text displayed in the caption."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue("")> _

IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_text
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
Set(ByVal value As String)
IssueVision的PaneCaption控件源码分析            m_text 
= value
IssueVision的PaneCaption控件源码分析            Invalidate() 
'重会控件的显示
IssueVision的PaneCaption控件源码分析
        End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
'两个同样的属性,但是在即使按照上边控制Caption属性的方式来控制Text属性,属性面板中也不显示Text属性,不知动为什么?

IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return Me.Caption
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As String)
IssueVision的PaneCaption控件源码分析            Me.Caption 
= Value
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' if the caption is active or not
IssueVision的PaneCaption控件源码分析
    <Description("The active state of the caption, draws the caption with different gradient colors."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue(False)> _

IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_active
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal value As Boolean)
IssueVision的PaneCaption控件源码分析            m_active 
= value
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' if should maintain an active and inactive state
IssueVision的PaneCaption控件源码分析
    <Description("True always uses the inactive state colors, false maintains an active and inactive state."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue(True)> _

IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_allowActive
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal value As Boolean)
IssueVision的PaneCaption控件源码分析            m_allowActive 
= value
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' if the caption is active or not
IssueVision的PaneCaption控件源码分析
    <Description("If should draw the text as antialiased."), _
IssueVision的PaneCaption控件源码分析     Category(
"Appearance"), DefaultValue(True)> _

IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_antiAlias
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal value As Boolean)
IssueVision的PaneCaption控件源码分析            m_antiAlias 
= value
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析#Region 
" color properties "
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析
    <Description("Color of the text when active."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue(GetType(Color), "Black")> 
_
 Color
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_colorActiveText
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As Color)
IssueVision的PaneCaption控件源码分析            
If Value.Equals(Color.Empty) Then Value = Color.Black
IssueVision的PaneCaption控件源码分析            m_colorActiveText 
= Value
IssueVision的PaneCaption控件源码分析            m_brushActiveText 
= New SolidBrush(m_colorActiveText)
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
<Description("Color of the text when inactive."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue(GetType(Color), "White")> _
 Color
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_colorInactiveText
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As Color)
IssueVision的PaneCaption控件源码分析            
If Value.Equals(Color.Empty) Then Value = Color.White
IssueVision的PaneCaption控件源码分析            m_colorInactiveText 
= Value
IssueVision的PaneCaption控件源码分析            m_brushInactiveText 
= New SolidBrush(m_colorInactiveText)
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
<Description("Low color of the active gradient."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue(GetType(Color), "255, 165, 78")> _
 Color
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_colorActiveLow
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As Color)
IssueVision的PaneCaption控件源码分析            
If Value.Equals(Color.Empty) Then Value = Color.FromArgb(25516578)
IssueVision的PaneCaption控件源码分析            m_colorActiveLow 
= Value
IssueVision的PaneCaption控件源码分析            CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
<Description("High color of the active gradient."), _
IssueVision的PaneCaption控件源码分析    Category(
"Appearance"), DefaultValue(GetType(Color), "255, 225, 155")> _
 Color
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_colorActiveHigh
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As Color)
IssueVision的PaneCaption控件源码分析            
If Value.Equals(Color.Empty) Then Value = Color.FromArgb(255225155)
IssueVision的PaneCaption控件源码分析            m_colorActiveHigh 
= Value
IssueVision的PaneCaption控件源码分析            CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
<Description("Low color of the inactive gradient."), _
IssueVision的PaneCaption控件源码分析      Category(
"Appearance"), DefaultValue(GetType(Color), "3, 55, 145")> _
 Color
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_colorInactiveLow
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As Color)
IssueVision的PaneCaption控件源码分析            
If Value.Equals(Color.Empty) Then Value = Color.FromArgb(355145)
IssueVision的PaneCaption控件源码分析            m_colorInactiveLow 
= Value
IssueVision的PaneCaption控件源码分析            CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
<Description("High color of the inactive gradient."), _
IssueVision的PaneCaption控件源码分析      Category(
"Appearance"), DefaultValue(GetType(Color), "90, 135, 215")> _
 Color
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return m_colorInactiveHigh
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析        
Set(ByVal Value As Color)
IssueVision的PaneCaption控件源码分析            
If Value.Equals(Color.Empty) Then Value = Color.FromArgb(90135215)
IssueVision的PaneCaption控件源码分析            m_colorInactiveHigh 
= Value
IssueVision的PaneCaption控件源码分析            CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析            Invalidate()
IssueVision的PaneCaption控件源码分析        
End Set
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析#
End Region
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' internal properties
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析    
' brush used to draw the caption
 SolidBrush
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return CType(IIf(m_active AndAlso m_allowActive, _
IssueVision的PaneCaption控件源码分析             m_brushActiveText, m_brushInactiveText), SolidBrush)
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' gradient brush for the background
 LinearGradientBrush
IssueVision的PaneCaption控件源码分析        
Get
IssueVision的PaneCaption控件源码分析            
Return CType(IIf(m_active AndAlso m_allowActive, _
IssueVision的PaneCaption控件源码分析             m_brushActive, m_brushInactive), LinearGradientBrush)
IssueVision的PaneCaption控件源码分析        
End Get
IssueVision的PaneCaption控件源码分析    
End Property
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' ctor
()
IssueVision的PaneCaption控件源码分析        
MyBase.New()
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' this call is required by the Windows Form Designer
IssueVision的PaneCaption控件源码分析
        InitializeComponent()
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' set double buffer styles
IssueVision的PaneCaption控件源码分析
        '设置双重缓冲,以改善控件的显示效果
IssueVision的PaneCaption控件源码分析
        Me.SetStyle(ControlStyles.DoubleBuffer Or ControlStyles.UserPaint Or _
IssueVision的PaneCaption控件源码分析         ControlStyles.AllPaintingInWmPaint 
Or ControlStyles.ResizeRedraw, True)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' init the height
IssueVision的PaneCaption控件源码分析
        Me.Height = Consts.DefaultHeight
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' format used when drawing the text
IssueVision的PaneCaption控件源码分析
        m_format = New StringFormat
IssueVision的PaneCaption控件源码分析        m_format.FormatFlags 
= StringFormatFlags.NoWrap
IssueVision的PaneCaption控件源码分析        m_format.LineAlignment = StringAlignment.Center '保证控件中文字的垂直对齐效果

IssueVision的PaneCaption控件源码分析
        '在不完全适合布局形状的字符串中修整字符,指定将文本修整成最接近的字符,并在被修整的行的末尾插入一个省略号
IssueVision的PaneCaption控件源码分析
        m_format.Trimming = StringTrimming.EllipsisCharacter
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' init the font
IssueVision的PaneCaption控件源码分析
        Me.Font = New Font(Consts.DefaultFontName, Consts.DefaultFontSize, FontStyle.Bold)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' create gdi objects
IssueVision的PaneCaption控件源码分析
        Me.ActiveTextColor = m_colorActiveText
IssueVision的PaneCaption控件源码分析        Me.InactiveTextColor 
= m_colorInactiveText
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' setting the height above actually does this, but leave
IssueVision的PaneCaption控件源码分析
        ' in incase change the code (and forget to init the 
IssueVision的PaneCaption控件源码分析
        ' gradient brushes)
IssueVision的PaneCaption控件源码分析
        CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' internal methods
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析    
' the caption needs to be drawn
 PaintEventArgs)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
MyBase.OnPaint(e)
IssueVision的PaneCaption控件源码分析        DrawCaption(e.Graphics)
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' draw the caption
 Graphics)
IssueVision的PaneCaption控件源码分析        
' background
IssueVision的PaneCaption控件源码分析
        g.FillRectangle(Me.BackBrush, Me.DisplayRectangle)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' caption
IssueVision的PaneCaption控件源码分析
        If m_antiAlias Then
IssueVision的PaneCaption控件源码分析            
'控制文本呈现模式,指定在无提示的情况下使用每个字符的 AntiAlias
IssueVision的PaneCaption控件源码分析
            '标志符号位图来绘制字符。由于采用了 AntiAlias,质量会得到改善。
IssueVision的PaneCaption控件源码分析
            '由于关闭了提示,主干宽度差可能会比较明显。
IssueVision的PaneCaption控件源码分析
            g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
IssueVision的PaneCaption控件源码分析        End If
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' need a rectangle when want to use ellipsis
IssueVision的PaneCaption控件源码分析
        '绘制区域相对于控件有一定的位移
IssueVision的PaneCaption控件源码分析
        Dim bounds As RectangleF = New RectangleF(Consts.PosOffset, 0, _
IssueVision的PaneCaption控件源码分析         Me.DisplayRectangle.Width 
- Consts.PosOffset, Me.DisplayRectangle.Height)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        g.DrawString(m_text, Me.Font, Me.TextBrush, bounds, m_format)
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
' clicking on the caption does not give focus,
IssueVision的PaneCaption控件源码分析
    ' handle the mouse down event and set focus to self
 MouseEventArgs)
IssueVision的PaneCaption控件源码分析        
MyBase.OnMouseDown(e)
IssueVision的PaneCaption控件源码分析        
If Me.m_allowActive Then Me.Focus()
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
 System.EventArgs)
IssueVision的PaneCaption控件源码分析        
MyBase.OnSizeChanged(e)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析        
' create the gradient brushes based on the new size
IssueVision的PaneCaption控件源码分析
        CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
 CreateGradientBrushes()
IssueVision的PaneCaption控件源码分析        
' can only create brushes when have a width and height
IssueVision的PaneCaption控件源码分析
        If Me.Width > 0 AndAlso Me.Height > 0 Then
IssueVision的PaneCaption控件源码分析            
If Not (m_brushActive Is NothingThen m_brushActive.Dispose()
IssueVision的PaneCaption控件源码分析            m_brushActive 
= New LinearGradientBrush(Me.DisplayRectangle, _
IssueVision的PaneCaption控件源码分析             m_colorActiveHigh, m_colorActiveLow, LinearGradientMode.Vertical)
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析            
If Not (m_brushInactive Is NothingThen m_brushInactive.Dispose()
IssueVision的PaneCaption控件源码分析            m_brushInactive 
= New LinearGradientBrush(Me.DisplayRectangle, _
IssueVision的PaneCaption控件源码分析              m_colorInactiveHigh, m_colorInactiveLow, LinearGradientMode.Vertical)
IssueVision的PaneCaption控件源码分析        
End If
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析#Region 
" Windows Form Designer generated code "
IssueVision的PaneCaption控件源码分析

IssueVision的PaneCaption控件源码分析
    'UserControl overrides dispose to clean up the component list.
)
IssueVision的PaneCaption控件源码分析        
If disposing Then
IssueVision的PaneCaption控件源码分析            
If Not (components Is NothingThen
IssueVision的PaneCaption控件源码分析                components.Dispose()
IssueVision的PaneCaption控件源码分析            
End If
IssueVision的PaneCaption控件源码分析        
End If
IssueVision的PaneCaption控件源码分析        
MyBase.Dispose(disposing)
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
'Required by the Windows Form Designer
IssueVision的PaneCaption控件源码分析
    Private components As System.ComponentModel.IContainer
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析    
'NOTE: The following procedure is required by the Windows Form Designer
IssueVision的PaneCaption控件源码分析
    'It can be modified using the Windows Form Designer.  
IssueVision的PaneCaption控件源码分析
    'Do not modify it using the code editor.
 InitializeComponent()
IssueVision的PaneCaption控件源码分析        
'
IssueVision的PaneCaption控件源码分析
        'PaneCaption
IssueVision的PaneCaption控件源码分析
        '
IssueVision的PaneCaption控件源码分析
        Me.Name = "PaneCaption"
IssueVision的PaneCaption控件源码分析
        Me.Size = New System.Drawing.Size(15030)
IssueVision的PaneCaption控件源码分析    
End Sub
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析#
End Region
IssueVision的PaneCaption控件源码分析
IssueVision的PaneCaption控件源码分析
End Class
IssueVision的PaneCaption控件源码分析


这是个很简单的控件,但是我想对初学者应该是有帮助的,主要体现在以下几点:

背景的渐变绘制

表面文字质量的控制

设计过程中的控件绘制控制

文字与控件调整的关系

属性面板的控制

总结一下:
由于是第一次学习制作控件,看看这个源代码对自己的帮助是很大的,在.Net中制作控件相对于VB可能略微复杂一点,但是效果要好很多,在我们现有的项目中原先的Panel控件完全是结合图片+Label来制作的,灵活性和资源利用率要差很多,采用GDI+来绘制控件,效果和质量要好很多。看这段代码应该对组件的制作和GDI+能有更好的理解和认识。

在自己仿照的编写过程中,基本上是看代码和帮助来完成的,发生了两个很笨的事情,一个是设计完组件,没有编译便想使用,结果控件无法使用,所有如果在项目中控件修改了,至少要编译一次在使用。另一个是设计完的控件找不到,后来在工具箱中找到我得用户控件才找到,笨呀.




相关文章:

  • 2022-02-13
  • 2022-12-23
  • 2022-12-23
  • 2021-04-12
  • 2022-01-24
  • 2021-10-13
  • 2021-10-31
  • 2021-05-20
猜你喜欢
  • 2022-01-18
  • 2021-08-26
  • 2021-11-12
  • 2022-02-15
  • 2022-12-23
  • 2021-11-25
  • 2022-12-23
相关资源
相似解决方案