终极工具箱是一个强大的库,它提供了多种皮肤框架,允许开发者为他们的应用程序添加美观且一致的用户界面。本文将介绍如何在应用程序中实现这些皮肤,并动态地在运行时更换它们。
要在应用程序中设置皮肤,首先需要从COXSkinnedApp
派生应用程序类,而不是从CWinApp
派生。同时,不要忘记包含OXSkins.h
头文件。
对于多文档界面(MDI)应用程序,主框架窗口应该从COXMenuBarFrame
派生;对于单文档界面(SDI)应用程序,则从COXMenuBarFrame
派生。
在主框架类的构造函数中,调用COXMenuBarFrame<…>
的构造函数,并传递CBRS_ALIGN_ANY
作为第一个参数,RUNTIME_CLASS(COXSizableMiniDockFrameWnd)
作为第二个参数。
工具栏应该从COXCoolToolBar
派生或实例化,而不是从CToolBar
。
在主框架类中添加一个COXBitmapMenuOrganizer
实例。在主框架窗口的WM_CREATE
处理程序中调用COXBitmapMenuOrganizer::AttachFrameWnd(…)
,然后调用COXBitmapMenuOrganizer::AutoSetMenuImage(…)
。
在主框架类中添加一个COXTabClientWnd
实例,这将启用MDI标签。在主框架窗口的WM_CREATE
处理程序中调用COXTabClientWnd::Attach(...)
。
视图类应该从COXSkinnedView
派生,其中PARENT
是之前派生的视图类的名称。
在应用程序类InitInstance
的最开始调用SetCurrentSkin(_T("
。可以选择"Classic"、"Office XP"和"Office 2003"中的皮肤。可以随时再次调用这个方法,以允许用户在皮肤之间切换。
// 步骤 1 - 从 COXSkinnedApp 派生应用程序类
class CSkinsDemoApp : public COXSkinnedApp {
public:
CSkinsDemoApp();
...
// 步骤 2 - 从 COXMenuBarFrame 派生主框架窗口
class CMainFrame : public COXMenuBarFrame {
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
...
// 步骤 3 - 调用 COXMenuBarFrame 的构造函数
// 并传递 CBRS_ALIGN_ANY 作为第一个参数
// 传递 RUNTIME_CLASS(COXSizableMiniDockFrameWnd) 作为第二个参数
CMainFrame::CMainFrame() :
COXMenuBarFrame(CBRS_ALIGN_ANY,
RUNTIME_CLASS(COXSizableMiniDockFrameWnd)) {
...
// 步骤 4 - 从 COXCoolToolBar 派生或实例化工具栏
COXCoolToolBar m_wndToolBar;
COXCoolToolBar m_wndToolBar2;
// 步骤 5 - 在主框架类中添加 COXBitmapMenuOrganizer 实例
// 这将允许菜单显示位图
COXBitmapMenuOrganizer m_BMO;
// 步骤 5 (续) - 调用 COXBitmapMenuOrganizer::AttachFrameWnd(...)
m_BMO.AttachFrameWnd(this);
m_BMO.AutoSetMenuImage();
// (将此代码放置在 CMainFrame 类的 OnCreate 处理程序中)
// 步骤 6 - 在主框架类中添加 COXTabClientWnd 实例
// 这将启用 MDI 标签
COXTabClientWnd m_MTIClientWnd;
// 步骤 6 (续) - 在主框架类的 OnCreate() 中调用 COXTabClientWnd::Attach(...)
m_MTIClientWnd.Attach(this);
// 步骤 7 - 从 COXStatusBar 派生或实例化状态栏
COXStatusBar m_wndStatusBar;
// 步骤 8: 从 COXSkinnedView<...> 派生视图类
#define BASEVIEW CView
class CSkinsDemoView : public COXSkinnedView {
protected:
// 仅通过序列化创建
};