Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Office XP look & feel controls

0.00/5 (No votes)
22 Jan 2002 1  
Some controls (toolbar, button, combobox, ...) with the Office XP look and feel.

Sample Image

Introduction

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...

}
by:
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.

Without:

    // ...

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

With:
    // ...

    cDC.FillSolidRect (CClientRect (this), 255);
    // ...

CWindowText: Encapsulate GetWindowText calls.

Without:

    // ...

    CString sText;
    GetWindowText (sText);
    CDC.DrawText (sText, rc, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
    // ...

With:
    // ...

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

Credit

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

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.

A list of licenses authors might use can be found here