How to: Render a Visual Style Element

The System.Windows.Forms.VisualStyles namespace exposes VisualStyleElement objects that represent the Windows user interface (UI) elements supported by visual styles. This topic demonstrates how to use the VisualStyleRenderer class to render the VisualStyleElement that represents the Log Off and Shut Down buttons of the Start menu.

To render a visual style element

  1. Create a VisualStyleRenderer and set it to the element you want to draw. Note the use of the System.Windows.Forms.Application.RenderWithVisualStyles property and the System.Windows.Forms.VisualStyles.VisualStyleRenderer.IsElementDefined(System.Windows.Forms.VisualStyles.VisualStyleElement) method; the VisualStyleRenderer constructor will throw an exception if visual styles are disabled or an element is undefined.

    Private renderer As VisualStyleRenderer = Nothing
    Private element As VisualStyleElement = _
        VisualStyleElement.StartPanel.LogOffButtons.Normal
    
    Public Sub New()
        Me.Location = New Point(50, 50)
        Me.Size = New Size(200, 200)
        Me.BackColor = SystemColors.ActiveBorder
    
        If Application.RenderWithVisualStyles And _
            VisualStyleRenderer.IsElementDefined(element) Then
                renderer = New VisualStyleRenderer(element)
        End If
    End Sub
    
    private VisualStyleRenderer renderer = null;
    private readonly VisualStyleElement element =
        VisualStyleElement.StartPanel.LogOffButtons.Normal;
    
    public CustomControl()
    {
        this.Location = new Point(50, 50);
        this.Size = new Size(200, 200);
        this.BackColor = SystemColors.ActiveBorder;
    
        if (Application.RenderWithVisualStyles &&
            VisualStyleRenderer.IsElementDefined(element))
        {
            renderer = new VisualStyleRenderer(element);
        }
    }
    
    private:
        VisualStyleRenderer^ renderer;
        VisualStyleElement^ element;
    
    public:
        CustomControl()
        {
            this->Location = Point(50, 50);
            this->Size = System::Drawing::Size(200, 200);
            this->BackColor = SystemColors::ActiveBorder;
            this->element = 
                VisualStyleElement::StartPanel::LogOffButtons::Normal;
            if (Application::RenderWithVisualStyles &&
                VisualStyleRenderer::IsElementDefined(element))
            {
                renderer = gcnew VisualStyleRenderer(element);
            }
        }
    
  2. Call the DrawBackground method to render the element that the VisualStyleRenderer currently represents.

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        ' Draw the element if the renderer has been set.
        If (renderer IsNot Nothing) Then
            renderer.DrawBackground(e.Graphics, Me.ClientRectangle)
    
        ' Visual styles are disabled or the element is undefined, 
        ' so just draw a message.
        Else
            Me.Text = "Visual styles are disabled."
            TextRenderer.DrawText(e.Graphics, Me.Text, Me.Font, _
                New Point(0, 0), Me.ForeColor)
        End If
    End Sub
    
    protected override void OnPaint(PaintEventArgs e)
    {
        // Draw the element if the renderer has been set.
        if (renderer != null)
        {
            renderer.DrawBackground(e.Graphics, this.ClientRectangle);
        }
    
        // Visual styles are disabled or the element is undefined, 
        // so just draw a message.
        else
        {
            this.Text = "Visual styles are disabled.";
            TextRenderer.DrawText(e.Graphics, this.Text, this.Font,
                new Point(0, 0), this.ForeColor);
        }
    }
    
    protected:
        virtual void OnPaint(PaintEventArgs^ e) override
        {
            // Draw the element if the renderer has been set.
            if (renderer != nullptr)
            {
                renderer->DrawBackground(e->Graphics, this->ClientRectangle);
            }
    
            // Visual styles are disabled or the element is undefined,
            // so just draw a message.
            else
            {
                this->Text = "Visual styles are disabled.";
                TextRenderer::DrawText(e->Graphics, this->Text, this->Font,
                    Point(0, 0), this->ForeColor);
            }
        }
    

Compiling the Code

This example requires:

See Also

Concepts

Rendering Controls with Visual Styles