
Introduction
The CToolbarEx
class supports basic customization (As in IE) with controls on it. Additionally it can hide the controls when the toolbar is docked vertically. This class uses the framework provided by ToolBarCtrl
to do the customization of the Toolbar. It also supports Large Icons and Text on Buttons.
It uses a modified CCustomizeDialog
class by Nikolay Denisov to provide extra options in the Toolbar customize Dialog.
I have hardcoded a few things in CCustomizeDialog
to avoid resource dependences It also overrides CDockBar
with CDockBarEx
to provide 3D looks and overcome some docking bugs.
To use these in your project, do the following steps:
- Add ToolBarEx.cpp and ToolBarEx.h in your Project.
- Include ToolbarEx.h in MainFrame.h and Replace
CToolBar
with CToolBarEx
in CMainFrame
#include "ToolBarEx.h"
. .
CToolBarEx m_wndToolBar;
- In your
OnCreate
override in your CMainFrame
class, when the creation of the Toolbar is done (including controls), call SetToolBarInfoForCustomization
to set the Customization Data in the Toolbar. This function should be called after the creation of the toolbar, controls and dropdown is done.
CRect rt(0,0,200,120);
m_pComboBox =(CComboBox *) m_wndToolBar.InsertControl(
RUNTIME_CLASS(CComboBox),_T(""),
rt,ID_FIND,WS_VSCROLL|CBS_DROPDOWNLIST);
m_pComboBox->AddString(_T("One"));
m_pComboBox->AddString(_T("Two"));
m_pComboBox->AddString(_T("Three"));
m_wndToolBar.AddDropDownButton(ID_OP,IDR_OP,TRUE);
m_wndToolBar.SetToolBarInfoForCustomization();
- Restore the last saved data of the Toolbar
m_wndToolBar.RestoreState();
Similarly you can also add SaveState
in OnClose
of the CMainFrame
.
- Then delete the buttons you do not want to show as default and call
MarkDefaultState
to set the default state of the toolbar. The default state is set when Reset button on the Customize Dialog Box is pressed.
m_wndToolBar.GetToolBarCtrl().DeleteButton(
m_wndToolBar.CommandToIndex(ID_CUSTOMIZE));
m_wndToolBar.MarkDefaultState();
- Call
FrameEnableDocking
instead of EnableDocking
to use CDockBarEx
instead of CDockBar
.
FrameEnableDocking(this,CBRS_ALIGN_ANY);
Member Functions & Data Members
CWnd* InsertControl(CRuntimeClass* pClass,LPCTSTR lpszWindowName,
CRect& rect,UINT nID,DWORD dwStyle );
This function creates and inserts the control into the Toolbar and returns the window inserted. In rect parameter, pass only the width and height.
CWnd* InsertControl(CWnd* pCtrl,CRect& rect,UINT nID);
This function inserts the already created control into the Toolbar. In rect parameter, pass only the width and height.
BOOL AddDropDownButton(UINT nIDButton,UINT nIDMenu,BOOL bArrow=TRUE);
This function a button to a Dropdown with a menu attached to it. Set bArrow to TRUE if you want to show arrow next to it.
void SetToolBarInfoForCustomization();
This function sets the Customization information for the Toolbar. The Names used for the buttons in Customize dialog box are taken from the Tooltip of the Button. (String after Last '\n' of Prompt in Button Properties in Toolbar resource editing.) Call this function after the creation of the Toolbar is done. i.e. Controls, Dropdown have been added.
void MarkDefaultState();
This function sets the default state of the Toolbar. The default state is set when Reset button of Customize Dialog Box is pressed.
void SaveState()
This function saves the State of the Toolbar in the Registry.
void RestoreState()
This function restores the State of the Toolbar from the Registry.
BOOL m_bHideChildWndOnVertical;
This flag controls whether the Controls are visible in the Vertical docking mode. Default Value is TRUE
BOOL HasButtonText( int nID)
This function is used to determine whether the button has Text in "Selective Text on Right". At present it returns TRUE for all. Override this to provide new logic. nID is the command Identifier.
Minimum Requirements
It requires 5.80 version of the Commctl32.dll. It uses few features of 5.81 version, but they seem to work fine on 5.80 also. Please look at the Demo for full details.
Thanks to all Code Project /Code Guru Developers.
History
- 16 Oct 2001 - updated download files
- 20 Dec 2001 - updated files, new .NET style!