原創(chuàng)|其它|編輯:郝浩|2012-09-20 11:50:12.000|閱讀 5253 次
概述:1、VC2008集成了BCGControlBar的相關(guān)功能,用wizard生成的話如果選與BCGControlBar有關(guān)的性能,如預(yù)定皮膚,則應(yīng)用程序是從CWinAppEx派生,再加CBCGPWorkspace似乎不行。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
1、VC2008集成了BCGControlBar的相關(guān)功能,用wizard生成的話如果選與BCGControlBar有關(guān)的性能,如預(yù)定皮膚,則應(yīng)用程序是從CWinAppEx派生,再加CBCGPWorkspace似乎不行。
2、BCG 為了方便程序員,在注冊(cè)表中保存了窗口的大小、位置等信息,包括工具欄的相應(yīng)信息。這樣減少了程序員保存和恢復(fù)用戶上次使用過的界面的重復(fù)勞動(dòng)。但也會(huì)造成改變菜單之類出現(xiàn)無(wú)反應(yīng)的現(xiàn)象,讓人摸不著頭腦。可以采用的一個(gè)方法是,刪除 BCG 為你保存的注冊(cè)表鍵:
HKEY_CURRENT_USER\Software\[your corporation]\[your application]\Workspace
里面 your corporation 是指在 app 類里面 SetRegistryKey 指定的路徑;your application 就是你的應(yīng)用程序名。
把這個(gè)刪掉之后,還是用你最上面的代碼,運(yùn)行。OK!
更方便的是InitInstance里設(shè)m_bSaveState=FALSE;
如果已經(jīng)有注冊(cè)內(nèi)容了再加一句CleanState();
程序成型后再加上。
3、應(yīng)用皮膚的過程
(1)找一個(gè)BCG的例子,將菜單與皮膚相關(guān)的項(xiàng)復(fù)制粘貼到你的菜單下,ID值是連續(xù)的。
(2)CMainFrame的頭文件中
#define CFrameWnd CBCGPFrameWnd//類定義前。這樣可以省很多替換工作哦 UINT m_nAppLook;//指示應(yīng)用哪個(gè)皮膚 CBCGPMenuBar m_wndMenuBar; //手動(dòng)加入消息響應(yīng): 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) //這是范圍的響應(yīng),所以ID要連續(xù) ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_2000, ID_VIEW_APPLOOK_VS2008, OnUpdateAppLook) //初始化函數(shù) 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); //可浮動(dòng) //直接把以下兩個(gè)函數(shù)拷貝上去就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)當(dāng)然是新建一個(gè)需要的上下文菜單
(2)應(yīng)用程序類的頭文件下
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)響應(yīng)上下文菜單的視圖類中增加對(duì)上下文菜單消息的響應(yīng)
void C***View::OnContextMenu(CWnd* , CPoint point) { theApp.ShowPopupMenu (IDR_CONTEXT_MENU, point, this); // TODO: 在此處添加消息處理程序代碼 }
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園