Click here to Skip to main content
15,879,239 members
Articles / Operating Systems / Windows

Rich OutlookBar in XP and Vista Style

Rate me:
Please Sign up or sign in to vote.
4.86/5 (84 votes)
31 Mar 2021MIT3 min read 369.4K   6.9K   295   115
Creating a rich OutlookBar in XP or Vista style
In this article, you will learn how to create a rich OutlookBar in XP or Vista style

Screenshot - NewScreenCapture.jpg

Introduction

I've always enjoyed using a control that behaves like the OutlookBar in Outlook. After testing and creating this, I knew that if I wanted other people to work intuitively with my programs, the OutlookBar control must look and work like the one in Outlook.

Needed Properties

The control must be functional and accessible during runtime, as well as in design mode. You can resize the control in design time, so you can choose which buttons will be displayed as large buttons. The buttons can be added and changed using a collection editor. During runtime, the DropDown icon opens a context menu where you can choose which buttons will be visible. You also can open a "Navigation Pane Options" form where you can reorder the buttons.

At runtime, mouse movements must cause the buttons to repaint if needed. There are different color schemes for hovering buttons. I need large buttons and small buttons, displayed in the correct order even after resizing the control. I also want to be able to set a button in a "not allowed" state. Depending on the user of your program, you can disable certain buttons. The difference between Allowed and Enabled is that with the Allowed property set to False, you cannot see the button.

Basic Structure

There are three classes in this control:

Class OutlookBarButton

This represents the instances of the separate buttons. No painting occurs in this class. The basic members of this class are:

  • Text: This is the text drawn on the button if it's in a large state. If the button is at the bottom of the control, a tooltip will be displayed with the text of the button.
  • Visible: When False, the button will not be visible in the control. You can change this value at runtime with ContextMenu using the DropDown icon.
  • Allowed: When False, this button will not be visible in the control. You cannot access this button at runtime, so you can prevent certain users from clicking a certain button.
  • Image: The image that will be displayed. It works best with a 24x24 icon or larger.
  • Rectangle: This is only accessible in the assembly. When the OutlookBar class calculates where to draw the buttons, it will give each button the rectangle that OutlookBar used to draw it. Thanks to this property, it's easy to find out which button is clicked or which button must be repainted using different colors.

Class OutlookBarButtonCollection

Representing the collection of buttons on the control, this inherits from CollectionBase. In the code, you just use the normal procedures to add or remove buttons to the control:

VB
Dim newButton as New Altea.OutlookBarButton
With newButton
    .Text="my button"
    .Visible=False
    .Image=My.Resources.myImage
End With
me.OutlookBar1.Buttons.Add(newButton)

Or using the overloaded constructor:

VB
Me.OutlookBar1.Buttons.Add(New Altea.OutlookBarButton("my button", 
    My.Resources.myImage))

Class OutlookBar

Inheriting from System.Windows.Forms.Control, this is the main class. You have a property called Renderer with two options: Office2003 and Office2007. In a future version, there will be a third option called Custom. You can select a button from the code:

VB
Me.OutlookBar1.Buttons("Journal").Selected = True

This class has the most events. Events such as MouseMove, MouseDown, MouseLeave, etc. will be handled in this class. The painting also happens in this class. OutlookBar will decide which ButtonState the buttons have depending on which user action has happened:

VB
Friend Enum ButtonState
    Passive
    Hovering
    Selected
End Enum 

The ButtonState will raise the Paint methods to use the correct colors and cursor. In the painting code, there will often be references to several rectangles. Here's an overview with this image:

Screenshot - CaptureStructure_edit.JPG

Conclusion

Try it, run it and tell me about it!

History

  • 10th February, 2007: Original version posted
  • 14th July, 2007: Reduced flickering, added custom rendering for colors and button height
  • 2nd August, 2007: Download updated

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Software Developer
Belgium Belgium
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralSuggestion Pin
MCAST7619-Aug-07 6:36
MCAST7619-Aug-07 6:36 
Generalexpanded Outlook-bar Pin
RiekeS8-Aug-07 10:59
RiekeS8-Aug-07 10:59 
AnswerRe: expanded Outlook-bar [modified] Pin
Star Vega8-Aug-07 11:05
Star Vega8-Aug-07 11:05 
GeneralRe: expanded Outlook-bar Pin
Thomas-H.22-Aug-07 3:44
Thomas-H.22-Aug-07 3:44 
GeneralVS 2005 Pin
Star Vega1-Aug-07 9:06
Star Vega1-Aug-07 9:06 
GeneralNewer version Pin
Jonathan Beam1-Aug-07 4:55
Jonathan Beam1-Aug-07 4:55 
GeneralCannot open TestOutlookBar solution in VS2005 Pin
MCAST7631-Jul-07 12:33
MCAST7631-Jul-07 12:33 
QuestionReally nice...but...i have a problem...could you help? Pin
lexxus27-Jul-07 7:41
lexxus27-Jul-07 7:41 
AnswerRe: Really nice...but...i have a problem...could you help? Pin
lexxus27-Jul-07 7:47
lexxus27-Jul-07 7:47 
GeneralRe: Really nice...but...i have a problem...could you help? Pin
Star Vega27-Jul-07 8:10
Star Vega27-Jul-07 8:10 
GeneralVery Nice Pin
Paul Conrad22-Jul-07 19:03
professionalPaul Conrad22-Jul-07 19:03 
QuestionButton Click Problem [modified] Pin
mr_doles22-Jul-07 8:26
mr_doles22-Jul-07 8:26 
AnswerRe: Button Click Problem Pin
mr_doles22-Jul-07 8:33
mr_doles22-Jul-07 8:33 
GeneralRe: Button Click Problem Pin
Thomas-H.22-Aug-07 3:41
Thomas-H.22-Aug-07 3:41 
Questionchanging color schemes at design time Pin
bjswift13-Jul-07 9:34
bjswift13-Jul-07 9:34 
AnswerRe: changing color schemes at design time Pin
Star Vega13-Jul-07 11:05
Star Vega13-Jul-07 11:05 
AnswerRe: changing color schemes at design time Pin
Star Vega17-Jul-07 10:56
Star Vega17-Jul-07 10:56 
Questionquestion Pin
The Wanderer11-Jul-07 3:34
The Wanderer11-Jul-07 3:34 
GeneralC# Pin
kris.allberry10-Jul-07 0:46
kris.allberry10-Jul-07 0:46 
GeneralRe: C# Pin
Mickey Ekstein7-Sep-07 11:36
Mickey Ekstein7-Sep-07 11:36 
GeneralRe: C# Pin
kris.allberry23-Nov-07 3:07
kris.allberry23-Nov-07 3:07 
Generalimportant question Pin
The Wanderer9-Jul-07 21:12
The Wanderer9-Jul-07 21:12 
GeneralRe: important question Pin
bjswift10-Jul-07 2:55
bjswift10-Jul-07 2:55 
GeneralRe: important question Pin
bjswift10-Jul-07 3:12
bjswift10-Jul-07 3:12 
GeneralGetting the control inside your project Pin
Star Vega10-Jul-07 12:46
Star Vega10-Jul-07 12:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.