VC 2008 sp1 (VC 2010)中CMFCToolBar工具栏的使用

1.如何添加自己的工具栏

在CMainFrame::OnCreate中,MFC自动添加的工具栏如下

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS 
| CBRS_FLYBY | CBRS_SIZE_FIXED) ||
!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
      TRACE0(_T(“未能创建工具栏\n”));
      return -1;      // 未能创建

参照其创建自己的工具栏,注意需添加红色字体部分
if (!m_wndDrawBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER 
| CBRS_TOOLTIPS | CBRS_FLYBY |CBRS_SIZE_FIXED
,CRect(1,1,1,1),IDR_DRAWBAR) ||
!m_wndDrawBar.LoadToolBar(IDR_DRAWBAR))
{
      TRACE0(“Failed to create toolbar\n”);
      return ;      // fail to create
}

2.停靠工具栏

创建好工具栏后,可用下面的代码停靠工具栏
EnableDocking(CBRS_ALIGN_ANY);
m_wndDrawBar.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndDrawBar,AFX_IDW_DOCKBAR_TOP);

如果需要两个工具栏排列在同一行上,可用下面的代码实现
this->DockPaneLeftOf(&m_wndDrawBar,&m_wndToolBar);  //将m_wndDrawBar停靠在m_wndToolBar的左边

如果有多个工具栏需要排列在不同的行上,可用下面的代码实现
//排列第一行的两个工具栏
DockPane(&m_wndBar1,AFX_IDW_DOCKBAR_TOP);
this->DockPaneLeftOf(&m_wndBar2,&m_wndBar1);
//排列第二行的两个工具栏
DockPane(&m_wndBar3,,AFX_IDW_DOCKBAR_TOP);
this->DockPaneLeftOf(&m_wndBar4,&m_wndBar3);

3.让一个工具栏上的按钮多行排列
CMFCToolBar wndToolBar; 
wndToolBar.GetButton(i)->m_bWrap=TRUE; //第i个按钮开始换行

4.插入组合框等
//创建和初始化组合框
CMFCToolBarComboBoxButton m_combo(IDC_COMBO1,
                                                                         -1, // 工具条位图中的图像序号
                                                                         CBS_DROPDOWNLIST, //组合框类型
                                                                         50);  //组合框的宽度
static int nstr[] = {1,2,3,4,5,6,7, 8, 9, 10};
CString str;
int nCount = sizeof (nstr) / sizeof (int);
for (int k=0; k<nCount; k++) 
{
        str.Format (_T (“%d”), nstr[k]);
        m_combo.AddItem(str);
}
m_combo.SelectItem(0);
//插入到工具栏
m_wndTextBar.InsertSeparator(); //添加分隔条
m_wndTextBar.InsertButton(m_combo,0);

如果插入菜单的话则使用 CMFCToolBarMenuButton

2011年10月18日 | 归档于 红薯的分享
标签:
本文目前尚无任何评论.

发表评论