首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC++

VC++ 打造 Office XP 風格介面:CMenuXP 類別完整應用指南

     編輯:VC++

前言

隨著 Windows XP 與 Office XP 釋出,扁平化、清爽的 Office XP 風格成為主流。法國開發者 Jean-Michel LE FOL 開發的 CMenuXP 類別讓 VC++ 6.0 輕鬆實現此風格。本文詳細說明整合步驟。

整合步驟

1. 加入原始檔

將 CMenuXP 原始碼資料夾 (通常命名 Tools) 複製至專案目錄。在 FileView 中:

  • Source Files 下新增 Tools 資料夾,加入所有 .cpp
  • Header Files 下新增 Tool Headers,加入所有 .h

2. 修改主框架類別 (MainFrm.h)

#include "Tools/MenuXP.h"
#include "Tools/ToolBarXP.h"
#include "Tools/StatusBarXP.h"
#include "Tools/ComboBoxXP.h"

class CMainFrame : public CFrameWnd
{
    DECLARE_MENUXP() // 加在 DECLARE_MESSAGE_MAP() 之後
    // ...
};

3. 修改 MainFrm.cpp

IMPLEMENT_MENUXP(CMainFrame, CFrameWnd) // 加在 IMPLEMENT_DYNCREATE 之後

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    // ...
    ON_MENUXP_MESSAGES() // 加入此行
END_MESSAGE_MAP()

4. 修改應用程式類別 (xxxApp.cpp)

BOOL CMyApp::InitInstance()
{
    AfxEnableControlContainer();
    CMenuXP::InitializeHook(); // 加在此處
    // ...
}

int CMyApp::ExitInstance()
{
    CMenuXP::UninitializeHook(); // 釋放鉤子
    return CWinApp::ExitInstance();
}

5. 啟用選單/工具列/狀態列 XP 風格

在 CMainFrame::OnCreate 中:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

    CMenuXP::UpdateMenuBar(this);
    CMenuXP::SetXPLookNFeel(this);
    
    // 工具列與狀態列只需將成員變數型別改為 XP 版本
    // CToolBar m_wndToolBar;      → CToolBarXP m_wndToolBar;
    // CStatusBar m_wndStatusBar;  → CStatusBarXP m_wndStatusBar;
    
    return 0;
}

進階功能

為選單項目加入圖示

// OnCreate 中續寫
m_imgList.Create(IDB_APPLE, 16, 0, RGB(192,192,192)); // 16x16 圖示,背景色銀灰
CMenuXP::SetMenuItemImage(ID_MENUITEM_APPLE, m_imgList, 0);

需在資源編輯器加入位圖 IDB_APPLE (16×16),並在 ClassWizard 為選單項目 ID_MENUITEM_APPLE 加入處理函式。

對話方塊控制項 XP 風格化

// AppleDlg.h
#include "Tools/ComboBoxXP.h"
#include "Tools/ButtonXP.h"

class CAppleDlg : public CDialog
{
    CComboBoxXP m_cmbFruit;        // 下拉式方塊
    CButtonXP m_btnOK;             // 確定鈕
    CButtonXP m_btnCancel;         // 取消鈕
    // ...
};

// AppleDlg.cpp - DoDataExchange
void CAppleDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_COMBO1, m_cmbFruit);
    DDX_Control(pDX, IDOK, m_btnOK);       // 必須為 IDOK/IDCANCEL 建立控制變數
    DDX_Control(pDX, IDCANCEL, m_btnCancel);
}

// OnInitDialog
BOOL CAppleDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    m_cmbFruit.AddString(_T("紅蘋果"));
    m_cmbFruit.AddString(_T("青蘋果"));
    return TRUE;
}

效果總結

  • 主選單、右鍵選單、工具列、狀態列全自動套用 Office XP 風格
  • 選單項目支援圖示
  • 對話方塊下拉式方塊、按鈕只需變更類別型別即可
  • 編譯通過即可見效,無需大量修改既有程式碼

已知限制

編輯框、列表框、樹狀檢視等控制項尚未支援 XP 風格,期待社群持續擴充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved