MFC中利用BCG库开发Ribbon界面程序

来源:互联网 发布:pe工具箱 知乎 编辑:程序博客网 时间:2024/06/05 11:55

本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2005。

关于BCG界面库,我用的是破解版的,网上应该有的是,如果读者找不到,可以与我联系~ ^^ 

1,将BCG/BCGCBPro目录路径添加到“项目属性->C/C++ ->常规 ->附加包含目录”中,同时将BCG/Bin目录路径添加到“项目属性->链接器 ->常规 ->附加库目录”中。

2,确保在CWinApp派生类(设为CMyApp)的InitInstance()成员函数中调用AfxOleInit();

3,在ExitInstance()函数中添加:

BCGCBProCleanUp();
return CWinApp::ExitInstance();

PS:如果没有的话,请实现此虚函数

4,在stdafx.h中添加

#include "BCGCBProInc.h"

5,为CMyApp添加基类,如下:

class CMyApp:public CWinApp,public CBCGPWorkspace

6,设置个性化的数据在注册表中的存放位置和需要个性化的特性。在CMyApp::InitInstance()函数中添加:

SetRegistryBase(_T("Settings"));

InitMouseManager();
InitContextMenuManager();
InitKeyboardManager();

7,将CMDIFrameWnd 修改为 CBCGPMDIFrameWnd,注意MainFrm.h和MainFrm.cpp中的所有CMDIFrameWnd都要改。

8,将CMDIChildWnd改成CBCGPMDIChildWnd,.h和.cpp中的都要改。

9,将CToolBar m_wndToolBar修改成CBCGPToolBar m_wndToolBar,并在你的CMainFrame类中添加一个CBCGPMenuBar类型的成员m_wndMenuBar,如下示:

CBCGPMenuBar m_wndMenuBar; // New menu bar
CBCGPToolBar m_wndToolBar; // Application toolbar

10,为使菜单条生效并且可停靠,在CMainFrame::OnCreate()函数中添加以下内容:

if (!m_wndMenuBar.Create (this)){
TRACE0("Failed to create menubar/n");
return -1; // fail to create
}

m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY |

CBRS_SIZE_DYNAMIC);

m_wndMenuBar.EnableDocking (CBRS_ALIGN_ANY);
DockControlBar (&m_wndMenuBar);

说明:你可以在你的应用程序中使用多个CBCGPToolBar,它们对应的位图将会自动地合并在一张位图上,然而,你只可以使用一个CBCGPMenuBar对象。

至此基本设置已经完成,此时你的程序应该可以正常地编译运行。下面介绍如何为应用程序设置不同的风格。

1,在菜单栏上添加一个弹出菜单,在其中添加一个菜单项,上面的文字分别为"Office 2003","Office 2007(blue)","Office 2007(black)","Office 2007(silver)","Office 2007(aqua)",对应的菜单项ID分别为ID_VIEW_APPLOOK_2003,ID_VIEW_APPLOOK_2007_1,,ID_VIEW_APPLOOK_2007_2,ID_VIEW_APPLOOK_2007_3,ID_VIEW_APPLOOK_2007_4。

2,为这五个菜单添加消息响应:

在MainFrm.cpp文件中,添加消息映射(在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间):

ON_COMMAND_RANGE(ID_VIEW_APPLOOK_2003, ID_VIEW_APPLOOK_2007_4, OnAppLook)

在CMainFrame类中添加OnAppLook函数声明:

afx_msg void OnAppLook(UINT id);

添加其方法实现:

void CMainFrame::OnAppLook(UINT id)
{
// CWaitCursor wait;

// CBCGPVisualManager2007::SetCustomColor ((COLORREF)-1);

switch (id)
{
case ID_VIEW_APPLOOK_2003:
   CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2003));
   break;
case ID_VIEW_APPLOOK_2007_1:
   CBCGPVisualManager2007::SetStyle(CBCGPVisualManager2007::VS2007_Aqua);
   CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
   break;
case ID_VIEW_APPLOOK_2007_2:
   CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_ObsidianBlack);
   CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
   break;

case ID_VIEW_APPLOOK_2007_3:
   CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_LunaBlue);
   CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
   break;

case ID_VIEW_APPLOOK_2007_4:
   CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_Silver);
   CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS (CBCGPVisualManager2007));
   break;
}
RedrawWindow (NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
}

0 0