an Explorer 2015-05-28 14:33 采纳率: 80%
浏览 2605
已采纳

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

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

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-05-28 14:44
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • oyljerry 2015-05-28 14:59
    关注

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

    评论
  • zzkjliu 2015-05-28 15: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); //不要忘了调用此函数,否则工具栏不显示。

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 高价微信红包金额尾数算法
  • ¥30 矩阵分析与古诗词意境
  • ¥15 使用uniapp把小程序转为app
  • ¥15 在win10 64位的vs打包MSI文件,放到win7 64位上安装成可执行exe文件后,点击程序不运行。
  • ¥50 大众点评用户浏览/消费记录爬虫
  • ¥15 求制作一个个人网页,
  • ¥15 寻涂色内存脚本作者有项目有市场有资源.却技术
  • ¥15 蓝桥杯c51单片机问题
  • ¥15 ajax跨域问题请求修改代码
  • ¥15 python matplotlib