BCGControlBar使用(一)

 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! 更方便的是把SetRegistryBase (_T("Settings"));先注释掉,程序成型后再加上。 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); }

你可能感兴趣的:(BCGControlBar使用(一))