手把手教你BCGControlBar MFC界面控件“起航”技巧(文章转载自:慧都控件网)

来源:互联网 发布:滨州行知中学 后悔 编辑:程序博客网 时间:2024/05/17 02:35

BCGControlBar是全球最大的MFC控件套包,由微软指定合作控件开发商BCGSoft公司开发,主要用于构建类似Microsoft® Office 2000/XP/2003/2007/2010、Microsoft Visual Studio(打印、用户定制工具栏、菜单等)和其他一些知名产品的高级用户界面,例如:日历、网格、编辑和甘特图等。

BCGControlBar下载

BCGControlBar安装好后,在开始使用前,你有一些初始化设置和使用技巧需要了解一下。

首先,请你按以下内容修改源码:

  • 确定在你的应用程序InitInstance()中调用了AfxOleInit()
  • 在你的应用程序ExistInstance()中添加一个调用BCGCBProCleanUp()
  • 在stdafx.h文件中添加如下内容 
#include "BCGCBProInc.h"

有关库版本将自动链接到你的项目中。

  • 添加CBCGWorkspace-derivation到你的程序类中 
class CMyApp : public CWinApp,public CBCGPWorkspace
  • 首先,你需要确定你的自定义数据将被保存在注册表中哪个地方,哪些功能是需要自定义的(如鼠标,键盘,上下文菜单)。要做到这一点,你需要在CMyApp :: InitInstance中设置注册表项和初始化定制管理器: 
SetRegistryBase (_T("Settings"));

// 初始化定制管理器:
InitMouseManager();
InitContextMenuManager();
InitKeyboardManager();
  • 假如你决定使用鼠标或上下文菜单的自定义功能,你需要在鼠标自定义管理器中附加一个视图,或初始化上下文菜单。重载CBCGWorkspace::PreLoadState方法:
class CMyApp ....
{
...
virtual void PreLoadState();
...
};

void CMyApp::PreLoadState()
{
// 把鼠标事件连接到特定的视图 :
GetMouseManager()->AddView (iIdTestView, _T("Test view"), IDR_VIEW);

// 初始化上下文菜单:
GetContextMenuManager()->AddMenu (_T("Test menu"), idMenu); 
}
  • 同时在mainfrm.h和mainfrm.cpp文件中把CMDIFrameWnd变成CBCGMDIFrameWnd(在SDI程序的情况下,把CFrameWnd变成CBCGFrameWnd)
  • CMDIChildWnd变成CBCGMDIChildWnd
  • CToolbar变成CBCGToolBar并添加一个内嵌菜单栏对象到你的CMainFrame类中:
CBCGPMenuBar    m_wndMenuBar;     // 新菜单栏
CBCGPToolBar      m_wndToolBar;      // 应用程序工具栏
  • 启用菜单栏功能需要在CMainFrame::OnCreate()方法中添加如下的行:
// 创建菜单栏(替换标准菜单栏):
if (!m_wndMenuBar.Create (this))
{
TRACE0("Failed to create menubar\n");
return -1;      // 创建失败
}

m_wndMenuBar.SetBarStyle (m_wndMenuBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

  • 启用菜单栏停靠功能,只需添加如下代码:T
m_wndMenuBar.EnableDocking (CBRS_ALIGN_ANY);
DockControlBar (&m_wndMenuBar);


提示:
你可以在程序中使用任意数量的CBCGToolBar工具栏。所有的工具栏图像将被合并到一个位图文件中。无论如何,只有一个CBCGMenuBar对象被使用。

启用工具栏/菜单自定义功能,请做如下修改:

  • 添加工具栏工具栏/菜单自定义命令 (例如,View | Customize...)
  • OnViewCustomize方法的实现。代码看起来如下:
void CMainFrame::OnViewCustomize()
{
// 创建一个自定义工具栏对话框:
CBCGPToolbarCustomize* pDlgCust = new CBCGPToolbarCustomize (this,
TRUE /* Automatic menus scaning */);

 // 添加预定义工具栏:
pDlgCust->AddToolBar ("Main", IDR_MAINFRAME);
....

 // 添加用户自定义命令:
pDlgCust->AddButton ("User", CBCGPToolbarButton (ID_USER_TOOL1, 1, "User Tool 1", TRUE));
pDlgCust->AddButton ("User", CBCGPToolbarButton (ID_USER_TOOL2, 2, "User Tool 2", TRUE));
pDlgCust->AddButton ("User", CBCGPToolbarButton (ID_USER_TOOL3, 3, "User Tool 3", TRUE));
....

 pDlgCust->SetUserCategory ("User");

 // 启用用户自定义工具栏的 创建/删除:
pDlgCust->EnableUserDefinedToolbars ();

 pDlgCust->Create ();
}

启用Microsoft Office 2000菜单:

  • 定义你自己的基本命令集合(通常在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::SetMenuFont (LPLOGFONT lpLogFont, BOOL bHorz = TRUE);


只需调用即可实现“页面”(自定义)按钮:

m_wndToolBar.EnableCustomizeButton (TRUE, id_of_customize_command,
_T("Customize..."));


以下代码可以实现按钮图像覆盖文字:

m_wndToolBar.EnableTextLabels (BOOL bEnable = TRUE);


实现用户自定义工具栏:

  • 添加一个新的菜单列表:ID_TOOLS_ENTRY。这个列表将被实际存在的工具栏列表自动替换。
  • 添加如下字符串资源列表:
    1. ID_TOOL1    "Activates user-defined tool\nUser Tool"
    2. ID_TOOL2    "Activates user-defined tool\nUser Tool"
      ....
    3. ID_TOOLx    "Activates user-defined tool\nUser Tool"
  • 在应用程序中调用InitInstance():

    EnableUserTools (ID_TOOLS_ENTRY, ID_TOOL1,    ID_TOOLx);
  • 一个新的"Tools"页面将被添加到自定义对话框中  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 仓鼠咬了肿了怎么办 被自家仓鼠咬了怎么办 仓鼠生完宝宝后怎么办 被金丝熊咬了怎么办 a字裙子没有内衬怎么办 踩过蟑螂的鞋子怎么办 宝宝给蚂蚁咬了怎么办 脚被蚂蚁咬肿了怎么办 孩子被蚂蚁咬了怎么办 家住高层有老鼠怎么办 久看手机眼睛疼怎么办 晚睡眼睛疼了怎么办 眼睛肿了有点痛怎么办 眼角两边长痘痘怎么办 坐动车行李超重怎么办 海康威视黑屏了怎么办 备孕喝酒抽烟了怎么办 鼻炎鼻子不通气怎么办速效办法 2岁宝宝智力落后怎么办 六个月宝宝尖足怎么办 3个月宝宝尖足怎么办 2岁宝宝发育慢怎么办 2岁宝宝便秘怎么办呀 2岁宝宝老是便秘怎么办 宝宝4岁不说话怎么办 宜家柜子味道重怎么办 家里有小飞虫怎么办呀 汽车里进老鼠了怎么办 老鼠跑到车里了怎么办 我的小车有老鼠怎么办 车里面进了老鼠怎么办 街电充电宝丢了怎么办 充电宝充不了电怎么办 脚裸扭伤肿了怎么办 大货车电瓶亏电怎么办 货车电瓶被偷了怎么办 小乌龟尾巴断了怎么办 长青春痘怎么办简单小妙招 一关灯就有蚊子怎么办 狗狗误食蟑螂药怎么办 泰迪误食蟑螂药怎么办