工具栏

BCG注册表清除:
第一次在CXXXApp::ExitInstance()  加入CleanState(),
运行一次
接着注释掉,再在OnInitInstance加入m_bSaveState=FALSE
 

估计在BCG控件要写注册表的时候,它自己的写入注册表函数会判断m_bSaveState

 

 

1.VC2008集成了BCGControlBar的相关功能,用wizard生成的话如果选与BCGControlBar有关的性能,如预定皮肤,则应用程序是从CWinAppEx派生,再加CBCGPWorkspace似乎不行。


2.BCG 为了方便程序员,在注册表中保存了窗口的大小、位置等信息,包括工具栏的相应信息。这样减少了程序员保存和恢复用户上次使用过的界面的重复劳动。但也会造成改变菜单之类出现无反应的现象,让人摸不着头脑。可以采用的一个方法是,删除 BCG 为你保存的注册表键:
HKEY_CURRENT_USER/Software/[your corporation]/[your application]/Workspace
里面 your corporation 是指在 app 类里面 SetRegistryKey 指定的路径;your application 就是你的应用程序名。
把这个删掉之后,还是用你最上面的代码,运行。OK! 

更方便的是InitInstance里设m_bSaveState=FALSE;

如果已经有注册内容了再加一句CleanState();

程序成型后再加上。


3.应用皮肤的过程
(1)找一个BCG的例子,将菜单与皮肤相关的项复制粘贴到你的菜单下,ID值是连续的。

(2)CMainFrame的头文件中
#define CFrameWnd CBCGPFrameWnd//类定义前。这样可以省很多替换工作哦
 UINT m_nAppLook;//指示应用哪个皮肤
 CBCGPMenuBar  m_wndMenuBar;
//手动加入消息响应:
 afx_msg void OnAppLook(UINT id);
 afx_msg void OnUpdateAppLook(CCmdUI* pCmdUI);

(3)CMainFrame的Cpp文件
//消息映射增加
 ON_COMMAND_RANGE(ID_VIEW_APPLOOK_2000, ID_VIEW_APPLOOK_VS2008, OnAppLook) //这是范围的响应,所以ID要连续
 ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_2000, ID_VIEW_APPLOOK_VS2008, OnUpdateAppLook)
//初始化函数
 m_nAppLook = theApp.GetInt (_T("ApplicationLook"), ID_VIEW_APPLOOK_2003);//初始的样子
//OnCreate
 OnAppLook (m_nAppLook);

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

 m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_SIZE_DYNAMIC);

 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 EnableAutoHideBars(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndMenuBar);                     //可浮动

 

//直接把以下两个函数拷贝上去就OK了。
void CMainFrame::OnAppLook(UINT id)
{
 CBCGPDockManager::SetDockMode (BCGP_DT_SMART);

 m_nAppLook = id;

 switch (m_nAppLook)
 {
 case ID_VIEW_APPLOOK_2000:
  // enable Office 2000 look:
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager));
  break;

 case ID_VIEW_APPLOOK_XP:
  // enable Office XP look:
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerXP));
  break;

 case ID_VIEW_APPLOOK_WIN_XP:
  // enable Windows XP look (in other OS Office XP look will be used):
  CBCGPWinXPVisualManager::m_b3DTabsXPTheme = TRUE;
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPWinXPVisualManager));
  break;

 case ID_VIEW_APPLOOK_2003:
  // enable Office 2003 look:
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2003));
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 case ID_VIEW_APPLOOK_VS2005:
  // enable VS 2005 look:
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerVS2005));
  CBCGPVisualManager::GetInstance ();
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 case ID_VIEW_APPLOOK_VS2008:
  // enable VS 2008 look:
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManagerVS2008));
  CBCGPVisualManager::GetInstance ();
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 case ID_VIEW_APPLOOK_2007_1:
  // enable Office 2007 look:
  CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_LunaBlue);
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 case ID_VIEW_APPLOOK_2007_2:
  // enable Office 2007 look:
  CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_ObsidianBlack);
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 case ID_VIEW_APPLOOK_2007_3:
  // enable Office 2007 look:
  CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_Aqua);
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 case ID_VIEW_APPLOOK_2007_4:
  // enable Office 2007 look:
  CBCGPVisualManager2007::SetStyle (CBCGPVisualManager2007::VS2007_Silver);
  CBCGPVisualManager::SetDefaultManager (RUNTIME_CLASS (CBCGPVisualManager2007));
  CBCGPDockManager::SetDockMode (BCGP_DT_SMART);
  break;

 default:
  ASSERT (FALSE);
 }

 CBCGPDockManager* pDockManager = GetDockManager ();
 if (pDockManager != NULL)
 {
  ASSERT_VALID (pDockManager);
  pDockManager->AdjustBarFrames ();
 }

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

 theApp.WriteInt (_T("ApplicationLook"), m_nAppLook);
}


void CMainFrame::OnUpdateAppLook(CCmdUI* pCmdUI)
{
 pCmdUI->SetRadio (m_nAppLook == pCmdUI->m_nID);
}

 

4.上下文菜单

(1)当然是新建一个需要的上下文菜单

(2)应用程序类的头文件下

 virtual void PreLoadState ();

Cpp文件

void C***App::PreLoadState ()
{

 GetContextMenuManager()->AddMenu (_T("My menu"), IDR_CONTEXT_MENU);//IDR_CONTEXT_MENU是菜单的ID

 // TODO: add another context menus here
}

(3)响应上下文菜单的视图类中增加对上下文菜单消息的响应

void C***View::OnContextMenu(CWnd* , CPoint point)
{
 theApp.ShowPopupMenu (IDR_CONTEXT_MENU, point, this);
 // TODO: 在此处添加消息处理程序代码
}

 

2.

BCG例子BCGPExplorer:

1.BCG的菜单、工具栏、动画图标和地址栏

这是BCG的主要特色,也比较繁琐。

(1)如果要支持自定义工具。

首先在String表定义入口ID:ID_TOOLS_ENTRY,与某菜单项关联。然后定义连续的ID,如ID_USER_TOOL1、ID_USER_TOOL2......。

在A

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值