2 imatt iMatt 于 2015.05.28 22:33 提问

大神你在吗?MFC对话框中多个工具栏如何单行显示

想在对话框中加入多个工具栏,但是不找不到可以在一排显示的方式.求大神们指点。

3个回答

caozhy
caozhy   Ds   Rxr 2015.05.28 22:44
已采纳

最简单的办法是把工具条放在CRebarCtrl里面
https://msdn.microsoft.com/zh-tw/library/cc468280(v=vs.71).aspx

zzkjliu
zzkjliu   2015.05.28 23:24

如何在对话框上停靠自己新建的工具栏

//先创建一个工具栏资源IDR_TOOLBAR1

m_cToolBar.CreateEx(this, TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE
| CBRS_TOP //初始停靠在客户区顶部
| CBRS_GRIPPER //左边有一条竖线
| CBRS_TOOLTIPS //产生工具提示
|CBRS_FLYBY //产生消息文本
| CBRS_SIZE_DYNAMIC //动态改变大小
| CBRS_BORDER_TOP //在工具栏上面显示边框
);//创建

m_cToolBar.LoadToolBar(IDR_TOOLBAR1);//加载资源
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //不要忘了调用此函数,否则工具栏不显示。

2.创建一个带图标的工具栏
这个方法不需要创建工具栏资源,但是要准备几个图标资源
以下代码没有整理,你自行整理一下
m_ToolBar.CreateEx(this, TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE
| CBRS_TOP //初始停靠在客户区顶部
| CBRS_GRIPPER //左边有一条竖线
| CBRS_TOOLTIPS //产生工具提示
|CBRS_FLYBY //产生消息文本
| CBRS_SIZE_DYNAMIC //动态改变大小
| CBRS_BORDER_TOP //在工具栏上面显示边框
);
CImageList m_ImageList;
//设置图标
m_ImageList.Create(32, 32, ILC_COLOR24|ILC_MASK,2,2); //后面两个参数2,2,不重要。随便指定

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONLOOK));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_REFURBISH));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONDEL));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONCLEAR));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONORDER));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONSORT));

m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ImageList.Detach();
m_ToolBar.SetButtons(NULL, 8); //共8个按钮
// 下面设置每个工具按钮文字,设置后,每个图标下面就显示相应的文字。也可以不设置
m_ToolBar.SetButtonInfo(0, ID_LOOK, TBSTYLE_BUTTON, 0);
m_ToolBar.SetButtonText(0, " 查 看 ");

m_ToolBar.SetButtonInfo(1, ID_REFURBISH, TBSTYLE_BUTTON, 1);
m_ToolBar.SetButtonText(1, " 刷 新 ");

m_ToolBar.SetButtonInfo(2, ID_SEPARATOR, TBBS_SEPARATOR , 1);

m_ToolBar.SetButtonInfo(3, ID_DELETE, TBSTYLE_BUTTON , 2);
m_ToolBar.SetButtonText(3, " 删 除 ");

m_ToolBar.SetButtonInfo(4, ID_CLEAR, TBSTYLE_BUTTON, 3);
m_ToolBar.SetButtonText(4, " 清 空 ");

m_ToolBar.SetButtonInfo(5, ID_SEPARATOR, TBBS_SEPARATOR , 3);

m_ToolBar.SetButtonInfo(6, ID_ORDER, TBSTYLE_BUTTON , 4);
m_ToolBar.SetButtonText(6, " 排 序 ");

m_ToolBar.SetButtonInfo(7, ID_SORT, TBSTYLE_BUTTON , 5);
m_ToolBar.SetButtonText(7, " 分 类 ");

m_ToolBar.SetSizes(CSize(51,51), CSize(32,32)); //设置按钮的大小,注意这个按钮大小要和图像列表中图像的大小一致(32,32)
//CSize(51,51)设置按钮大小, CSize(32,32)设置按钮上图标大小,
注意,第一个CSize中的参数必须比第二个CSize中的参数大,分别大至少7和6,如下所述
//(CSize(cx1,cy1), CSize(cx2,cy2));cx1-cx2>=7,cy1-cy2>=6

//设置按钮ID_ORDER和ID_SORT具有下拉箭头
m_ToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
DWORD dwStyle = m_ToolBar.GetButtonStyle(m_ToolBar.CommandToIndex(ID_ORDER));
dwStyle |= TBSTYLE_DROPDOWN;
m_ToolBar.SetButtonStyle(m_ToolBar.CommandToIndex(ID_ORDER),dwStyle);

dwStyle = m_ToolBar.GetButtonStyle(m_ToolBar.CommandToIndex(ID_SORT));
dwStyle |= TBSTYLE_DROPDOWN;
m_ToolBar.SetButtonStyle(m_ToolBar.CommandToIndex(ID_SORT),dwStyle);

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //不要忘了调用此函数,否则工具栏不显示。

iMatt
iMatt 只是没有设为为一行的代码
接近 3 年之前 回复
iMatt
iMatt 谢谢
接近 3 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.05.28 22:59

你可以自己创建工具栏,然后MoveWindow来控制位置大小。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!