Introduction

This control is a static control that creates a simplified toolbar similar to those found in Visual Studio. As the demo application shows, (as do the pictures above), the control creates a series of buttons within a static control. These buttons can be enabled or disabled, and the control can be drawn with or without a static edge.

Using the Control

It is very easy to put this control into your project. Here's an example:

Add the files btnST.cpp, btnST.h, ButtonGroupCtl.cpp and ButtonGroupCtl.h to your project. These are found in the source download.

Create or open a dialog resource to which you would like to add a button group.

Insert a static control with the appropriate text (‘Options' in the case of the demo). If you would like a border around the group then set the ‘Static Edge' flag:

In ClassWizard for your dialog class, create a member variable that links to the control, and choose the CButtonGroupCtl class:

If this does not appear, choose CStatic and then edit your class definition to use CButtonGroupCtl instead.

Also in your class definition, add the following line:

#include"ButtonGroupCtl.h"

Add a CImageList variable to your class, and initialise this in the constructor of you dialog class. For an example of this, see the demo project.

To add buttons to the control, in your constructor, use the AddButton function:

void AddButton(int nID, int nImage, LPCTSTR pszToolTip)

nID is the ID of the control you wish to add, for instance IDC_NEW.
nImage is the index of the image from the ImageList you wish to use.
pszToolTip is the tooltip you wish to use for the control. You may leave this blank.

Note that you cannot add or remove buttons from the control once it has been subclassed – it is not intended as a replacement for the toolbar control.

Now, add message handlers for the buttons in your dialog class. You must do this
manually by first adding a function (e.g. OnAdd()) to your class:

You should then add an entry in the message map, for instance:

ON_BN_CLICKED(IDC_NEW, OnAddItem)

Optionally, you can use the EnableButton(nID, bEnable = true) function to enable and disable buttons at run-time. Note that you cannot call this function until the control has been subclassed. If you want buttons to be initially enabled or disabled, you should do this in your OnInitDialog() override.

I hope this article has helped – the class is relatively simple and basic, but this was the aim. I often have come across the problem where items in a list need to be managed but have not had space to have full-blown buttons with text etc. to do this, so wrote this class to solve that problem. I also felt it was a fairly simple user interface concept to understand because of its use in other programs and also because of its similarity to a toolbar control. I may later update it with the ability to have its contents changed after it has been subclassed although I have not come across a need for this yet myself.

Acknowledgements

History

13 May 2001 - updated source files

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

Share

About the Author

Andrew is currently a student at the University of Cambridge, working towards a degree in Computer Science. The word 'working' is used here in a vague sense, with the hope that the reader will realise that the same sentence contained the word 'student'.

Aside from computing he has a strong interest in music, and enjoys the outdoors, particularly when the weather permits going out in them... To Andrew, cycling is fun, sailing is more fun, and the odd camping trip and walk is certainly what the doctor ordered.

In terms of programming experience, he first started writing programs for the Commodore Amiga using BASIC, after which he learned the joys of C and has never looked back. Since, he has added C++ and C# to his repotoire, along with a bunch of other crazy languages like ML that they like to teach in college.