Click here to Skip to main content
Click here to Skip to main content

The Ultimate Toolbox Application Skins

By , 24 Aug 2007
 

Visit the Ultimate Toolbox main page for an overview and configuration guide to the Ultimate Toolbox library.

Source code and project files for this sample can be found in the samples\advanced\SkinsDemo directory of the sample projects download.

Overview

The Skins Demo demonstrates the skinning framework available in The Ultimate Toolbox library. You can choose between the Office 2003, Office XP and Classic skins, and you can also change skins dynamically when the application is running.

Setting a Skin to Your Application

  1. Derive your application class from COXSkinnedApp instead of from CWinApp. Do not forget to include OXSkins.h.
  2. Derive your main frame window from COXMenuBarFrame<CMDIFrameWnd, COXSizeDockBar> instead of from CMDIFrameWnd for MDI applications. For SDI applications, derive your main frame window from COXMenuBarFrame<CFrameWnd, COXSizeDockBar> instead of from CFrameWnd.
  3. In the constructor of your main frame class call the constructor of COXMenuBarFrame<…> and pass CBRS_ALIGN_ANY for the first parameter and RUNTIME_CLASS(COXSizableMiniDockFrameWnd) for the second parameter.
  4. Derive or instantiate your toolbars from COXCoolToolBar instead of from CToolBar.
  5. Add an instance of COXBitmapMenuOrganizer to your main frame class. In the WM_CREATE handler of your main frame window call COXBitmapMenuOrganizer::AttachFrameWnd(…) and then COXBitmapMenuOrganizer:: AutoSetMenuImage(…).
  6. Add an instance of COXTabClientWnd to your main frame class. This will enable the MDI tabs. In the WM_CREATE handler of your main frame window call COXTabClientWnd::Attach(...).
  7. Derive or instantiate your status bar from COXStatusBar instead of CStatusBar.
  8. Derive your view class from COXSkinedView<PARENT>, where PARENT is the class from which your view was previously derived.

In the very beginning of your application class's InitInstance call SetCurrentSkin(_T("<skin name here>")). Choose from "Classic", "Office XP", and "Office 2003" skins. You can call this method again at any time to allow the user to switch between skins.

If you are having trouble following these steps they way they are outlined, just open the SkinsDemo project and do a text search for "STEP". You will find specific comments in all the places where the code needs to be modified:

Here is the related code which shows these actions in more detail:

// STEP 1 - Derive your application class from COXSkinnedApp insted of 

// CWinApp.

class CSkinsDemoApp : public COXSkinnedApp
{
public:
    CSkinsDemoApp();
    ...

 
// STEP 2 - Derive you main frame window from COXMenuBarFrame<cmdiframewnd, />.

class CMainFrame : public COXMenuBarFrame<cmdiframewnd, />
{
    DECLARE_DYNAMIC(CMainFrame)
public:
    CMainFrame();
    ... 

 
// STEP 3 - Call the constructor of COXMenuBarFrame<cmdiframewnd, /> and

//        pass CBRS_ALIGN_ANY for the first parameter and

//        RUNTIME_CLASS(COXSizableMiniDockFrameWnd) for the second parameter

CMainFrame::CMainFrame() : 
    COXMenuBarFrame<cmdiframewnd,coxsizedockbar />(CBRS_ALIGN_ANY,
    RUNTIME_CLASS(COXSizableMiniDockFrameWnd))
{   ...

// STEP 4 - Derive or instantiate your toolbars from COXCoolToolBar instead 

// of CToolBar.

    COXCoolToolBar m_wndToolBar;
    COXCoolToolBar m_wndToolBar2;

// STEP 5 - Add an instance of COXBitmapMenuOrganizer to your main frame 

// class. This will enable your menus to show bitmaps.

    COXBitmapMenuOrganizer m_BMO;

// STEP 5 (Cont'd) - Call COXBitmapMenuOrganizer::AttachFrameWnd(...) and then

//    COXBitmapMenuOrganizer::AttachFrameWnd(...)

m_BMO.AttachFrameWnd(this);
m_BMO.AutoSetMenuImage();        // (place this code in the OnCreate handler 

                                 // of your CMainFrame class)


// STEP 6 - Add an instance of COXTabClientWnd to your main frame class. 

// This will enable the MDI tabs.

COXTabClientWnd m_MTIClientWnd;

// STEP 6 (Cont'd) - Call COXTabClientWnd::Attach(...) in the OnCreate() of 

// the main frame class

m_MTIClientWnd.Attach(this);

// STEP 7 - Derive or instantiate your status bar from COXStatusBar instead 

// of CStatusBar.

COXStatusBar m_wndStatusBar;

// STEP 8: Derive your view class from COXSkinnedView<...>

#define BASEVIEW CView
class CSkinsDemoView : public COXSkinnedView<baseview />
{
protected: // create from serialization only

History

Initial CodeProject release August 2007.

License

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

About the Author

The Ultimate Toolbox
Web Developer
Canada Canada
Member
Organisation
264 members

In January 2005, David Cunningham and Chris Maunder created TheUltimateToolbox.com, a new group dedicated to the continued development, support and growth of Dundas Software’s award winning line of MFC, C++ and ActiveX control products.
 
Ultimate Grid for MFC, Ultimate Toolbox for MFC, and Ultimate TCP/IP have been stalwarts of C++/MFC development for a decade. Thousands of developers have used these products to speed their time to market, improve the quality of their finished products, and enhance the reliability and flexibility of their software.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionI would love ot use this, but I have a problem Pinmembernamezero11111112 Sep '12 - 7:50 
QuestionCan't download 0KB file PinmemberMember 85308688 Feb '12 - 4:16 
GeneralErrors in VS 2010 Beta2 PinmemberShah00700700723 Nov '09 - 5:21 
QuestionSkins and HTML Help Pinmemberchrisb4411 Nov '09 - 18:16 
QuestionWhy I got Error Link? PinmemberCuongfdd16 Jun '09 - 19:11 
Generali could not make it to use the OXCustumizeManager PinmemberMewMew200029 Jan '09 - 6:25 
QuestionCan not redraw the menu PinmemberJobsGuo14 Dec '08 - 18:29 
QuestionOffice 2003 Skin with MDI exe [modified] PinmemberBrandybuck3 Nov '08 - 7:32 
GeneralProblems with the control title in the TabViewBar and 3DTabViewBar Controls [modified] Pinmembermalfaro30 May '08 - 10:23 
QuestionSkins not working when a toolbar is located in a dll PinmemberWunni11 Feb '08 - 21:57 
GeneralCouldn't compile in VS 2008 PinmemberShah20072 Jan '08 - 5:06 
GeneralUI styles in Dialog based app Pinmembercanercaner8 Nov '07 - 9:20 
GeneralMenu text change doesn't work in Office Classic mode PinmemberShah200713 Sep '07 - 18:48 
QuestionHow to implement in SDI CFormView PinmemberShah20077 Sep '07 - 1:57 
QuestionHow to add Office 2007 skin PinmemberAhamad Alisha6 Sep '07 - 19:36 
GeneralSkins Demo Office2003 not blue on XP in Win-classic design PinmemberGerald7624 Aug '07 - 22:26 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130523.1 | Last Updated 25 Aug 2007
Article Copyright 2007 by The Ultimate Toolbox
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid