verificacion opcion ejemplo casillas casilla botones .net vb.net winforms user-controls gdi+

.net - opcion - Dibujar la casilla de verificación de acuerdo con el tamaño de la casilla?



php casillas de verificacion (1)

Necesita un factor de escala para determinar cuánto aumentar cada coordenada "x" e "y". Aquí hay un ejemplo (suponiendo que el ancho de la casilla de verificación predeterminada es de 12 píxeles, que es solo una suposición):

Dim scaleFactor As Single = CType(rect.Width, Single) / 12.0 Dim points As PointF() = New PointF() { New PointF(rect.X + scaleFactor * 3, rect.Y + scaleFactor * 5), New PointF(rect.X + scaleFactor * 5, rect.Y + scaleFactor * 7), New PointF(rect.X + scaleFactor * 9, rect.Y + scaleFactor * 3), New PointF(rect.X + scaleFactor * 9, rect.Y + scaleFactor * 4), New PointF(rect.X + scaleFactor * 5, rect.Y + scaleFactor * 8), New PointF(rect.X + scaleFactor * 3, rect.Y + scaleFactor * 6), New PointF(rect.X + scaleFactor * 3, rect.Y + scaleFactor * 7), New PointF(rect.X + scaleFactor * 5, rect.Y + scaleFactor * 9), New PointF(rect.X + scaleFactor * 9, rect.Y + scaleFactor * 5) }

Introducción

Estoy escribiendo un simple control de usuario de casilla de verificación que dibujará un fondo y un tic en un color personalizado.

Para dibujar el tic, hago esto:

'''''' <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

Este es el resultado:

Problema

El problema es que el tamaño / puntos de la marca se especifican de acuerdo con el tamaño de casilla de verificación predeterminado, obtengo la idea principal de este artículo:

Compatibilidad True Transparency para el control .NET CheckBox

Entonces, digamos que aumente la casilla de la casilla de verificación (el ancho y alto de la rect var del código anterior) y dibujará un pequeño tic como este:

Pregunta

¿Cómo podría modificar dinámicamente la aritmética que hago con los puntos en el método DrawTick para fijar el tamaño de tilde para otros tamaños de DrawTick ?