Chinaunix首页 | 论坛 | 博客
  • 博客访问: 607248
  • 博文数量: 263
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 2555
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-26 11:20
文章分类

全部博文(263)

文章存档

2011年(10)

2010年(19)

2009年(170)

2008年(64)

我的朋友

分类: WINDOWS

2009-10-30 20:08:35

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

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

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

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

4, 在stdafx.h中添加
  #include "bcg/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; 

             ...

        }

        RedrawWindow (NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW
             | RDW_FRAME | RDW_ERASE);

}

Office 2007其它的风格样式切换类似ID_VIEW_APPLOOK_2007_1,在此省略。

3,运行时请确保程序能够找到Bin目录下的相关DLL,否则切换风格时会失败。


阅读(2734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~