BCGControlBar Library Professional Edition installation:
整个库的源代码安装在<install dir>/BCGCBPro 目录下面.可执行文件(*.dll)安装在 <install dir>/Bin (for VisualStudio 6.0) 或<install dir>/Bin7 (for VisualStudio .NET)下面。
请在你的源代码中做如下的改变:
- 在应用程序的Include路径中加入BCGCBPro目录,具体添加办法如下:vs2005下面打开菜单工具的Option项,选择项目解决方案-〉vc++目录,然后将包含文件<install dir>/BCGCBPro 添加进去。
- 确信在你的应用程序的 InitInstance() 方法中调用了AfxOleInit() 。
- 在stdafx.h中加入下面的包含文件:
#include "BCGCBProInc.h"
- 使你的应用程序派生自:CBCGPWorkspace
class CMyApp : public CWinApp,
public CBCGPWorkspace
- 第一步,你需要定义一个在注册表里保存个性化数据的项并且鼠标,键盘和上下文菜单都需要。为了实现这一点,CMyApp::InitInstance set registry entry and initialize customization managers:
SetRegistryBase (_T("Settings"));
// Initialize customization managers:
InitMouseManager();
InitContextMenuManager();
InitKeyboardManager();
- 如果你决定使你的鼠标和菜单具有个性化,你需要 "attach" 一个需要的视图初始化鼠标和菜单的个性化管理。重载CBCGPWorkspace::PreLoadState 方法:
class CMyApp ....
{
...
virtual void PreLoadState();
...
};
void CMyApp::PreLoadState()
{
// Associate mouse event with specific view(s):
GetMouseManager()->AddView (iIdTestView, _T("Test view"), IDR_VIEW);
// Initialize context menus:
GetContextMenuManager()->AddMenu (_T("Test menu"), idMenu);
}
- 把框架文件中的基类CMDIFrameWnd 改为 CBCGPMDIFrameWnd (in case of SDI application changeCFrameWnd to CBCGPFrameWnd)
- 将子框架的基类 CMDIChildWnd 改为 CBCGPMDIChildWnd
- 将 CToolbar 改为 CBCGPToolBar 并且加入一个embedded menu bar 在你的CMainFrame类中:
CBCGPMenuBar m_wndMenuBar; // New menu bar
CBCGToolBar m_wndToolBar; // Application toolbar
- 在CMainFrame::OnCreate() 方法中加入下面几行以实现菜单的功能:
// Create menu bar (replaces the standard menu):
if (!m_wndMenuBar.Create (this))
{
TRACE0("Failed to create menubar/n");
return -1; // fail to create
}m_wndMenuBar.SetBarStyle (m_wndMenuBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
- 加入以下代码以实现ca:
m_wndMenuBar.EnableDocking (CBRS_ALIGN_ANY);
DockControlBar (&m_wndMenuBar);
Important:在你的应用程序中,你可以使用多个 CBCGPToolBar .所用工具条的图像将自动合并到一张位图上 . 但是只有一个CBCGPMenuBar 对象可以使用.
为了具有自定义工具条和菜单条, 请做如下改变:
- 加入 toolbar/menu customization command (for example, View | Customize...)
- Implement OnViewCustomize method. The code will look something like this:
void CMainFrame::OnViewCustomize()
{
// Create a customize toolbars dialog:
CBCGPToolbarCustomize* pDlgCust = new CBCGToolbarCustomize (this,
TRUE );// Add predefined toolbars:
pDlgCust->AddToolBar ("Main", IDR_MAINFRAME);
....// Add user-defined commands:
pDlgCust->AddButton ("User", CBCGPToolbarButton (ID_USER_TOOL1, 1, "User Tool 1", TRUE));
pDlgCust->AddButton ("User", CBCGToolbarButton (ID_USER_TOOL2, 2, "User Tool 2", TRUE));
pDlgCust->AddButton ("User", CBCGToolbarButton (ID_USER_TOOL3, 3, "User Tool 3", TRUE));
....pDlgCust->SetUserCategory ("User");
// Enable Create/Delete of the user-defined toolbars:
pDlgCust->EnableUserDefinedToolbars ();pDlgCust->Create ();
}
为了能具有 Microsofte Office 2000 的菜单风格:
- Define your own basic commands set (usually in CMainFrame::OnCreate()):
CList<UINT, UINT> lstBasicCoomads;
lstBasicCoomads.AddTail (ID_FILE_NEW);
lstBasicCoomads.AddTail (ID_FILE_OPEN);
lstBasicCoomads.AddTail (ID_FILE_SAVE);......
lstBasicCoomads.AddTail (ID_APP_ABOUT);
CBCGPToolBar::SetBasicCommands (lstBasicCoomads);
- 这些命令将使得这些菜单能保持常见.
使菜单项是否具有阴影的风格:
CBCGPMenuBar::EnableMenuShadows (BOOL bEnable = TRUE)
Note: please don't use menu shadows if your views content may be dynamically changed when the popup menu is shown (e.g., views shows animation, HTML page). In this case menu shadow "is remember" the previous view image.
在运行时改变菜单的字体:
CBCGPMenuBar::SetMenuFont (LPLOGFONT lpLogFont, BOOL bHorz = TRUE);
使工具条具有"pager" (customization) button just call:
m_wndToolBar.EnableCustomizeButton (TRUE, id_of_customize_command,
_T("Customize..."));
使工具条的按钮下具有文字:
m_wndToolBar.EnableTextLabels (BOOL bEnable = TRUE);
使用户能自定义工具:
- Add a new menu item: ID_TOOLS_ENTRY. This item will be automatically replaced by the actual tools list
- Add the following items to the STRING resource:
- ID_TOOL1 "Activates user-defined tool/nUser Tool"
- ID_TOOL2 "Activates user-defined tool/nUser Tool"
.... - ID_TOOLx "Activates user-defined tool/nUser Tool"
- In application's InitInstance() call:
EnableUserTools (ID_TOOLS_ENTRY, ID_TOOL1, ID_TOOLx);
- A new "Tools" page will be added to the customization dialog
To enable dynamic "tear-off" ("detachable") menus:
- Reserve some items in the STRING resource table. These IDs will be used as control bars IDs
- ID_TEAR_OFF1 "<dummy>"
- ID_TEAR_OFF2 "<dummy>"
- .......
- ID_TEAR_OFFx "<dummy>"
- For each "tear-off" popup menu, change the "Break" property to "Bar" (MF_MENUBARBREAK)
- In application's InitInstance() call:
EnableTearOffMenus (_T("RegBase", ID_TEAR_OFF1, ID_TEAR_OFFx);
To enable static "tear-off" ("detachable") menus:
- Reserve an item in the STRING resource table. This ID should be differ from dynamic tear-off ID (see above)
ID_TEAR_OFF_BAR "<dummy>"
- In the main frame OnShowPopupMenu, enable "tear-off" for the specific menu button:
pMenuButton->SetTearOff (ID_TEAR_OFF_BAR);
To ensure, that all BCGPControlBar allocations are freed properly:
- Add the following call into your application's ExitInstance() :
::BCGCBProCleanUp ();