原創|其它|編輯:郝浩|2012-09-20 11:50:12.000|閱讀 5253 次
概述:1、VC2008集成了BCGControlBar的相關功能,用wizard生成的話如果選與BCGControlBar有關的性能,如預定皮膚,則應用程序是從CWinAppEx派生,再加CBCGPWorkspace似乎不行。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
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: 在此處添加消息處理程序代碼 }
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園