Gambarlah centang kotak sesuai dengan ukuran kotaknya?

Perkenalan

Saya sedang menulis kontrol pengguna kotak centang sederhana yang akan menggambar latar belakang dan tanda centang dalam warna khusus.

Untuk menggambar tanda centang, saya melakukan ini:

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

Inilah hasilnya:

masukkan deskripsi gambar di sini


Masalah

Soalnya ukuran/titik centangnya ditentukan sesuai ukuran default checkbox, ide pokoknya saya dapatkan dari artikel ini:

Dukungan Transparansi Sejati untuk Kontrol Kotak Centang .NET

Jadi, misalkan saya menambah kotak pada kotak centang (lebar dan tinggi rect var kode di atas) maka akan muncul tanda centang kecil seperti ini:

masukkan deskripsi gambar di sini


Pertanyaan

Bagaimana saya dapat secara dinamis mengubah aritmatika yang saya lakukan dengan metode Poin dalam DrawTick untuk memperbaiki ukuran centang untuk ukuran kotak lainnya?


person ElektroStudios    schedule 04.05.2015    source sumber


Jawaban (1)


Anda memerlukan faktor skala untuk menentukan seberapa besar peningkatan setiap koordinat "x" dan "y". Berikut ini contohnya (dengan asumsi lebar kotak centang default adalah 12 piksel, ini hanya perkiraan):

    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)
        }
person Rajeev Goel    schedule 04.05.2015