Введение
Я пишу простой пользовательский элемент управления флажком, который будет рисовать фон и галочку в пользовательском цвете.
Чтобы нарисовать галочку, я делаю так:
''' <summary>
''' Draws the checkbox tick.
''' </summary>
''' <param name="g">The drawing surface.</param>
''' <param name="rect">The box rectangle.</param>
''' <param name="checkState">The checkbox state.</param>
Private Sub DrawTick(ByVal g As Graphics,
ByVal rect As Rectangle,
ByVal checkState As CheckState)
Select Case checkState
Case checkState.Checked
Dim points As PointF() =
New PointF() {
New PointF(rect.X + 3, rect.Y + 5),
New PointF(rect.X + 5, rect.Y + 7),
New PointF(rect.X + 9, rect.Y + 3),
New PointF(rect.X + 9, rect.Y + 4),
New PointF(rect.X + 5, rect.Y + 8),
New PointF(rect.X + 3, rect.Y + 6),
New PointF(rect.X + 3, rect.Y + 7),
New PointF(rect.X + 5, rect.Y + 9),
New PointF(rect.X + 9, rect.Y + 5)
}
Using checkPen As New Pen(Me.TickColor, 1)
g.DrawLines(checkPen, points)
End Using
Case checkState.Indeterminate
Using checkBrush As New SolidBrush(Me.TickColor)
g.FillRectangle(checkBrush, New Rectangle(rect.X + 3,
rect.Y + 3,
rect.Width - 5,
rect.Height - 5))
End Using
Case checkState.Unchecked
' Do Nothing.
End Select
End Sub
Вот результат:
Проблема
Проблема в том, что размер/точки галочки указаны в соответствии с размером флажка по умолчанию, я понял основную идею из этой статьи:
Поддержка True Transparency для Элемент управления .NET CheckBox
Итак, скажем, я увеличиваю поле флажка (ширина и высота rect
var кода выше), тогда он нарисует крошечную галочку, как это:
Вопрос
Как я могу динамически изменить арифметику, которую я делаю с точками в методе DrawTick
, чтобы исправить размер деления для других размеров ящика?