65.9K
CodeProject 正在变化。 阅读更多。
Home

终极工具箱应用程序皮肤

starIconstarIconstarIconstarIconstarIcon

5.00/5 (16投票s)

2007年8月24日

CPOL

2分钟阅读

viewsIcon

175274

downloadIcon

5081

终极工具箱支持 Office XP、Office 2003 和经典应用程序皮肤。

访问 终极工具箱主页,以获取概述和配置指南,了解终极工具箱库。

此示例的源代码和项目文件可以在下载的示例项目的 samples\advanced\SkinsDemo 目录中找到。

概述

皮肤演示演示了终极工具箱库中可用的皮肤框架。您可以选择 Office 2003、Office XP 和经典皮肤,并且还可以在应用程序运行时动态更改皮肤。

为您的应用程序设置皮肤

  1. 将您的应用程序类从 CWinApp 派生到 COXSkinnedApp。不要忘记包含 OXSkins.h
  2. 对于 MDI 应用程序,将您的主框架窗口从 CMDIFrameWnd 派生到 COXMenuBarFrame<CMDIFrameWnd, COXSizeDockBar>。对于 SDI 应用程序,将您的主框架窗口从 CFrameWnd 派生到 COXMenuBarFrame<CFrameWnd, COXSizeDockBar>
  3. 在您的主框架类的构造函数中调用 COXMenuBarFrame<…> 的构造函数,并将 CBRS_ALIGN_ANY 作为第一个参数,将 RUNTIME_CLASS(COXSizableMiniDockFrameWnd) 作为第二个参数传递。
  4. 将您的工具栏从 CToolBar 派生或实例化到 COXCoolToolBar
  5. COXBitmapMenuOrganizer 的实例添加到您的主框架类。在您的主框架窗口的 WM_CREATE 处理程序中调用 COXBitmapMenuOrganizer::AttachFrameWnd(…),然后调用 COXBitmapMenuOrganizer:: AutoSetMenuImage(…)
  6. COXTabClientWnd 的实例添加到您的主框架类。这将启用 MDI 选项卡。在您的主框架窗口的 WM_CREATE 处理程序中调用 COXTabClientWnd::Attach(...)
  7. 将您的状态栏从 CStatusBar 派生或实例化到 COXStatusBar
  8. 将您的视图类从 COXSkinedView<PARENT> 派生,其中 PARENT 是您的视图先前派生的类。

在您的应用程序类的 InitInstance 的最开始处调用 SetCurrentSkin(_T("<skin name here>"))。选择“Classic”、“Office XP”和“Office 2003”皮肤。您可以随时再次调用此方法,以允许用户在皮肤之间切换。

如果您在按照这些步骤时遇到问题,只需打开 SkinsDemo 项目并进行文本搜索“STEP”。您将在需要修改代码的所有位置找到特定的注释。

以下是相关的代码,它更详细地展示了这些操作。

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

历史

首次 CodeProject 发布于 2007 年 8 月。

© . All rights reserved.