补充CBCGPToolBar的使用
CMainFrame::OnCreate下
(1) CBCGPToolBar::EnableQuickCustomization ();//按Alt键时可以拖动工具栏上的图标重新排列
(2) m_wndToolBar.EnableCustomizeButton (TRUE, ID_VIEW_CUSTOMIZE, _T("Customize..."));
//允许自定义工具栏,名字“Customize”,并与菜单项ID_VIEW_CUSTOMIZE关联。

void CMainFrame::OnViewCustomize()
{//在BCG标准的自定义工具栏中加入新的属性页
CList <CRuntimeClass*, CRuntimeClass*> lstCustomPages;
lstCustomPages.AddTail (RUNTIME_CLASS (CMyCustomizationPage));
//CMyCustomizationPage是一个自定义的属性页
//------------------------------------
// Create a customize toolbars dialog:
//------------------------------------
CBCGPToolbarCustomize* pDlgCust = new CBCGPToolbarCustomize (this,
TRUE ,
BCGCUSTOMIZE_MENU_SHADOWS | BCGCUSTOMIZE_TEXT_LABELS |
BCGCUSTOMIZE_LOOK_2000 | BCGCUSTOMIZE_MENU_ANIMATIONS, // default parameters
&lstCustomPages); // pointer to the list of runtime classes of the custom property pages
pDlgCust->Create ();
}
(3)将占位菜单项ID_VIEW_TOOLBARS替换为菜单IDR_POPUP_TOOLBAR
virtual BOOL OnShowPopupMenu (CBCGPPopupMenu* pMenuPopup);
BOOL CMainFrame::OnShowPopupMenu (CBCGPPopupMenu* pMenuPopup)
{
//---------------------------------------------------------
// Replace ID_VIEW_TOOLBARS menu item to the toolbars list:
//---------------------------------------------------------
CFrameWnd::OnShowPopupMenu (pMenuPopup);
if (pMenuPopup != NULL &&
pMenuPopup->GetMenuBar ()->CommandToIndex (ID_VIEW_TOOLBARS) >= 0)
{
if (CBCGPToolBar::IsCustomizeMode ())
{
//----------------------------------------------------
// Don't show toolbars list in the cuztomization mode!
//----------------------------------------------------
return FALSE;
}
pMenuPopup->RemoveAllItems ();
CMenu menu;
VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
pMenuPopup->GetMenuBar ()->ImportFromMenu (*pPopup, TRUE);
}
return TRUE;
}

IDR_POPUP_TOOLBAR菜单
