Introduction
When I wanted a quick and nice header for my SDI project I could not find any, so I made my own.
Some of the code is for beginners. It is not
made for learning, but just for saving some time. There are some comments on the code, but
almost all of it should be crystal clear, even for beginners. The header supports different colors on text,
text shadows, and background, change of font size and type, change of placement of the text in the header. It does also have a gradient effect on the background.
In the new update I've implemented support for adding pictures in the back of
the text. I've also included a MDI project which include a CView
class that with
the same toolbar. Please see history for other changes done.
Using the code
The CHeaderToolbar
is inherit its functions from CToolBar
, and it is assumed as regular toolbar like the default "new, open,
save"-toolbar in SDI/MDI projects.
When you create a toolbar it is really important that you call the SetDrawRect(Rect)
function. The creation process for a default
header toolbar is like this:
CRect Size;
Size.SetRect(0,0,0,30);
if (!m_headerdefault.CreateEx(this, TBSTYLE_TRANSPARENT ,
WS_CHILD | WS_VISIBLE | CBRS_TOP, Size))
{
TRACE0("Failed to create header\n");
}
m_headerdefault.SetDrawRect(Size);
The
Size
rect is only used to set the height on creation. If the creation is successful
you will get a header with default colors. To manipulate the other settings you can use these functions:
void SetDrawRect(CRect Rect);
void SetGradient(BOOL Activate);
void SetGradientStartColor(COLORREF GradientStart);
void SetGradientEndColor(COLORREF GradientEnd);
void SetRemoveBorder(BOOL OnOff);
BOOL GetRemoveBorder();
void SetWindowText(CString InputText);
void GetWindowText(CString &OutputText);
void SetFont(CString FontName);
void SetFontSize(int NewSize);
void SetTextCol(COLORREF Col);
void SetTextShadowCol(COLORREF Col);
void SetPlaceMent(int Place);
Each time you use the different functions to change layout, the header refreshes. If
you want to change more options and stop the redrawing use the
SetRedraw(FALSE)
to the toolbar, and then
SetRedraw()
to enable redrawing again.
Border fix and picture support
In this version I've got a great solution for getting rid of the border
around each toolbar. I want to say thanks to Christian Wieninger at codeguru.com
for telling me.
As default the border is drawn, to remove it you can use SetRemoveBorder(TRUE)
.
Here is an example of how it looks like:
At the left the border is drawn, at the right it is gone. At the bottom there
is a picture included. For adding a picture check out these functions:
void LoadBackgroundPicture(CString Path);
void SetStrech(BOOL OnOff);
void SetPicturePlaceMent(int Place);
void SetVAlign(BOOL OnOff);
BOOL GetStrech();
Toolbars in CView
When I made the MDI example I got a request on how to implement a toolbar in
a CView
window. In the example I've added the HeaderToolbar to each of the MDI
views and on the MainFrm.
History
- v1.1 - Update: Added picture support, border fix and optimized the redraw
function (thanks barto at codeproject.com). All these updates
removed the known issues header (nice!)
- v1.0 - First release
Todo
- Multi line - Sometimes you maybe need to show more info
- Text scrolling - A nice textscroller if you need to show more than one line
- Progress bar - That way you don't need the status bar at the bottom.