Click here to Skip to main content
12,500,915 members (55,104 online)
Click here to Skip to main content
Add your own
alternative version


60 bookmarked

Office XP look & feel controls

, 22 Jan 2002 CPOL
Rate this:
Please Sign up or sign in to vote.
Some controls (toolbar, button, combobox, ...) with the Office XP look and feel.

Sample Image


Yet another owner drawn toolbar. This one has the Office XP look & feel. Have a look to the source code (ToolbarXP.h and ToolbarXP.cpp) for more details. Some parts of code are copied from other articles. Thanks to their authors!

How to use the CToolBarXP class

Include the ToolbarXP.h file and just replace the CToolBar m_wndToolBar declaration in your files by CToolBarXP m_wndToolBar. That's all ! (see the demo)

Other classes

CButtonXP, CListBoxXP, CComboBoxXP: Flat controls with "mouseover" and "mouseout" effects.
CStatusBarXP: Flat statusbar.
CPopup: Allow any control to be popped over frame (as shown in the image).
CWindowsManagerDlg: MDI child window manager.

CBufferDC: An easy-to-use class to simplify the bufferized drawing.

Example: Replace in your code:

void CToolBarXP::OnPaint ()
    CPaintDC cDC (this);

    cDC.FillSolidRect (CRect(10,10,100,100), 255);
    cDC.MoveTo (10, 10);
    cDC.LineTO (100, 100);
    // Etc...
void CToolBarXP::OnPaint ()
    CPaintDC cpDC (this); // Modified line
    CBufferDC cDC (cpDC); // Added line

    cDC.FillSolidRect (CRect(10,10,100,100), 255);
    cDC.MoveTo (10, 10);
    cDC.LineTO (100, 100);
    // Etc...
And it works too with any HDC (see the CButtonXP::DrawItem method for another exemple).
The only constraint: you have to do all drawing with the same CBufferDC instance. You cannot have a first part in the OnEraseBkgnd and another one in the OnPaint.

CPenDC and CBrushDC: Simplify the use of local CPen and CBrush objects.

Without those classes:

// ...
CPen pen (PS_SOLID, 1, RGB(0,0,255));
CBrush brush (RGB(0,255,0));
CPen* pOldPen = cDC.SelectObject (&pen);
CBrush* pOldBrush = cDC.SelectObject (&brush);
cDC.Rectangle (10,10,100,100);
cDC.SelectObject (pOldPen);
cDC.SelectObject (pOldBrush);
// ...
With them:
// ...
CPenDC pen (cDC, RGB(0,0,255));
CBrushDC brush (cDC, RGB(0,255,0));
cDC.Rectangle (10,10,100,100);
// ...

CClientRect and CWindowRect: Encapsulate GetClientRect and GetWindowRect calls.


// ...
CRect rcClient;
GetClientRect (rcClient);
cDC.FillSolidRect (rcClient, 255);
// ...
// ...
cDC.FillSolidRect (CClientRect (this), 255);
// ...

CWindowText: Encapsulate GetWindowText calls.


// ...
CString sText;
GetWindowText (sText);
// ...
// ...
cDC.DrawText (CWindowText (this), rc, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
// ...


Thanks to Christian Rodemeyer for his RGB<->HLS conversion methods from the article CColor - RGB and HLS combined in one class.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Jean-Michel LE FOL
Web Developer CSC
France France
Jean-Michel LE FOL is a GraphTalk product architect.
GraphTalk is a set of products which cover the whole scope of the development process. GraphTalk is used by the main insurance compagnies over the world.
The development team is currently based in France near Paris.

You may also be interested in...


Comments and Discussions

QuestionQuestion about article: Office XP look & feel controls Pin
Nenad Smiljkovic6-Jun-13 19:22
memberNenad Smiljkovic6-Jun-13 19:22 
GeneralFound a way to display 24 bit images in CMenuXP, if anyone is interested Pin
Axiom66615-Mar-06 15:10
memberAxiom66615-Mar-06 15:10 
GeneralRe: Found a way to display 24 bit images in CMenuXP, if anyone is interested Pin
Axiom66620-Mar-06 6:54
memberAxiom66620-Mar-06 6:54 
GeneralSetButtonText Pin
sujee8-Oct-04 2:07
membersujee8-Oct-04 2:07 
Question? CMenuXP::OnMeasureItem ? Pin
Frank Lagattuta24-Sep-04 17:32
memberFrank Lagattuta24-Sep-04 17:32 
GeneralOffice XP Style Edit Control Pin
Jigar Mehta23-Jun-04 22:58
memberJigar Mehta23-Jun-04 22:58 
GeneralOffice XP style task pane Pin
Seshagiri6-Apr-04 23:25
memberSeshagiri6-Apr-04 23:25 
GeneralWindows XP style vs Office XP style Pin
Marco van der Kolk1-Oct-03 22:51
memberMarco van der Kolk1-Oct-03 22:51 
GeneralException in Draw.cpp Pin
Jaime Stuardo31-Aug-03 15:51
memberJaime Stuardo31-Aug-03 15:51 
GeneralRe: Exception in Draw.cpp Pin
agfirehead14-Sep-03 19:02
memberagfirehead14-Sep-03 19:02 
GeneralLoading and saving toolbar position Pin
Arthurit18-Jul-03 23:03
memberArthurit18-Jul-03 23:03 
GeneralRe: Loading and saving toolbar position Pin
Jean-Michel LE FOL20-Jul-03 8:27
memberJean-Michel LE FOL20-Jul-03 8:27 
GeneralRe: Loading and saving toolbar position Pin
Arthurit20-Jul-03 22:55
memberArthurit20-Jul-03 22:55 
GeneralBug Pin
wz_zhou2-Jun-03 1:56
memberwz_zhou2-Jun-03 1:56 
GeneralIcon style doesn't work in CButtonXP control Pin
jstuardo19-Apr-03 7:54
memberjstuardo19-Apr-03 7:54 
GeneralRe: Icon style doesn't work in CButtonXP control Pin
DJ Mantra4-Feb-05 1:47
memberDJ Mantra4-Feb-05 1:47 
GeneralIncompatible with Win95 Pin
adamtegen25-Mar-03 4:36
memberadamtegen25-Mar-03 4:36 
GeneralRe: Incompatible with Win95 Pin
Marco van der Kolk29-Sep-03 4:20
memberMarco van der Kolk29-Sep-03 4:20 
GeneralRe: Incompatible with Win95 Pin
pippa6-Apr-04 3:44
memberpippa6-Apr-04 3:44 
QuestionHow to change the combo's height. Pin
Duc Truong11-Mar-03 21:38
memberDuc Truong11-Mar-03 21:38 
GeneralThe disabled imagem seems a little orange Pin
fpm126-Dec-02 10:40
memberfpm126-Dec-02 10:40 
GeneralXP-style NOT shown Pin
darthmaul3-Dec-02 4:58
memberdarthmaul3-Dec-02 4:58 
GeneralAbout the compiled demo Pin
Jean-Michel LE FOL3-Dec-02 21:29
memberJean-Michel LE FOL3-Dec-02 21:29 
Generala bug! Pin
Anonymous21-Aug-02 23:23
sussAnonymous21-Aug-02 23:23 
GeneralRe: a bug! Pin
Takahiro Araki16-Jan-03 13:24
memberTakahiro Araki16-Jan-03 13:24 
GeneralAn error with toolbar Pin
DMTR3-Aug-02 12:40
sussDMTR3-Aug-02 12:40 
GeneralRe: An error with toolbar Pin
ahmoy14-Feb-04 7:42
memberahmoy14-Feb-04 7:42 
GeneralRe: An error with toolbar Pin
ahmoy16-Feb-04 14:39
memberahmoy16-Feb-04 14:39 
GeneralJean-Michel, lire svp. Pin
Stephane F.8-Jul-02 22:21
memberStephane F.8-Jul-02 22:21 
GeneralRe: Jean-Michel, lire svp. Pin
AlexMarbus3-Aug-02 10:57
memberAlexMarbus3-Aug-02 10:57 
GeneralRe: Jean-Michel, lire svp. Pin
Anonymous10-Nov-02 5:31
sussAnonymous10-Nov-02 5:31 
GeneralWindows API programming Pin
buck18-Jun-02 9:53
memberbuck18-Jun-02 9:53 
GeneralRe: Windows API programming Pin
Dimitris Vassiliades4-Jul-03 7:03
memberDimitris Vassiliades4-Jul-03 7:03 
GeneralText on ToolBar Buttons Pin
jmgurgel31-May-02 7:39
memberjmgurgel31-May-02 7:39 
GeneralEdit control Pin
RED13-May-02 10:42
memberRED13-May-02 10:42 
GeneralRe: Edit control Pin
xr1st0s27-Jan-03 13:24
memberxr1st0s27-Jan-03 13:24 
GeneralRe: Edit control Pin
a1ring30-Jun-03 3:22
membera1ring30-Jun-03 3:22 
QuestionButton Text? Pin
Anonymous4-May-02 16:36
memberAnonymous4-May-02 16:36 
Generala problem Pin
Anonymous23-Apr-02 2:47
memberAnonymous23-Apr-02 2:47 
GeneralSolution Pin
Jean-Michel LE FOL29-Apr-02 1:16
memberJean-Michel LE FOL29-Apr-02 1:16 
GeneralText Labels On Right Pin
Anonymous7-Apr-02 11:52
memberAnonymous7-Apr-02 11:52 
GeneralRe: Text Labels On Right Pin
jmgurgel31-May-02 7:42
memberjmgurgel31-May-02 7:42 
GeneralBase Class Pin
jmgurgel23-Mar-02 6:31
memberjmgurgel23-Mar-02 6:31 
QuestionShading? Pin
Miguel Lopes20-Mar-02 0:03
memberMiguel Lopes20-Mar-02 0:03 
GeneralGreat Code, I like it ... Pin
Massimo Germi6-Mar-02 9:14
memberMassimo Germi6-Mar-02 9:14 
GeneralGood job, but ... Pin
Anonymous5-Mar-02 9:22
memberAnonymous5-Mar-02 9:22 
GeneralNew problem Pin
CosmoS2k7-Feb-02 6:36
memberCosmoS2k7-Feb-02 6:36 
GeneralRe: New problem Pin
Jean-Michel LE FOL7-Feb-02 11:04
memberJean-Michel LE FOL7-Feb-02 11:04 
GeneralGoof but... Pin
CosmoS2k6-Feb-02 20:02
memberCosmoS2k6-Feb-02 20:02 
GeneralRe: Goof but... Pin
Jean-Michel LE FOL6-Feb-02 22:24
memberJean-Michel LE FOL6-Feb-02 22:24 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160919.1 | Last Updated 23 Jan 2002
Article Copyright 2002 by Jean-Michel LE FOL
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid