Windows CE – building a transparent picturebox

Surprise!  PictureBox in Windows CE doesn’t support transparency.

Diving into yet another old forgotten corner of the .NET compact framework.

And just in case the mention of Compact Framework hasn’t scared you to death, today’s code will be in Visual Basic .NET


Imports System.Drawing.Imaging
Imports System.ComponentModel

Public Class TransparentPictureBox
    Inherits PictureBox

    Private _transparentColor As Color = Color.White
    Public Property TransparentColor() As Color
            Return _transparentColor
        End Get
        Set(ByVal value As Color)
            _transparentColor = value
        End Set
    End Property

    Protected Overloads Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        If Not Me.Image Is Nothing Then
            Dim pictureBounds As New Rectangle(0, 0, Me.Width, Me.Height)
            Dim imageBounds As New Rectangle(0, 0, Me.Image.Width, Me.Image.Height)
            Dim attributes As New ImageAttributes()
            ' set color to be set to transparent - if you don't paint the background below, then these pixels
            ' will appear black
            attributes.SetColorKey(Me.TransparentColor, Me.TransparentColor)
            e.Graphics.DrawImage(Me.Image, pictureBounds, imageBounds.X, imageBounds.Y, imageBounds.Width, imageBounds.Height, GraphicsUnit.Pixel, attributes)
        End If

    End Sub

    Protected Overloads Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
        ' paint background color
        Dim brush As SolidBrush
        brush = New SolidBrush(Me.Parent.BackColor)
        e.Graphics.FillRectangle(brush, Me.ClientRectangle)
    End Sub

End Class