转自:http://hi.baidu.com/zyl_aiwo/item/6931bace475b4451bdef6983
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