天天看点

【MFC】带组合框的工具栏

00. 目录

文章目录

00. 目录01. 案例概述02. 开发环境03. 关键技术04. 程序设计05. 秘笈心法06. 源码下载07. 附录

01. 案例概述

在Office软件中经常可以看到工具上有很多组合框,通过工具栏上的组合框Office可以非常方便的设置字体的大小、类型等。实例就实现带组合框的工具栏。效果如下图所示。

【MFC】带组合框的工具栏

02. 开发环境

系统环境:​Windows 10​

开发环境:​Visual Studio 2019​

03. 关键技术

实例使用CToolBar类创建工具栏,首先通过Create方法创建工具栏后,然后使用LoadBitmap设置按钮使用的图标,使用SetButtons设置按钮使用的ID资源,接着使用GetItemRect获取指定按钮的区域,然后使用CComboBox类的Create方法在该区域内创建组合框控件。如果想改变原有按钮的区域需要使用CToolBar类SetButtonInfo方法,该方法不但可以设置工具栏按钮使用的图标索引、按钮的样式,还可以改变按钮的宽度。

SetButtonInfo方法

该方法用来设置工具栏按钮的属性信息。语法:

void SetButtonInfo( int nIndex, UINT nID, UINT nStyle, int iImage );
nIndex 按钮的索引
nID 按钮的资源ID值
nStyle 按钮的样式,有以下取值。
TBBS_BUTTON:按钮样式。
TBBS_SEPARATOR:分隔条样式。
TBBS_CHECKBOX:复选样式
TBBS_GROUP:组样式。
TBBS_CHECKGROUP:复选组样式,该样式应放在按钮组的第一位置。
iImage 设置图片索引,以及按钮的宽度      

04. 程序设计

(1)新建一个基于单文档视图结构的应用程序。

(2)从CToolBar派生新类CStyleBar,并在CMainFrame类中声明该类的一个对象m_wndStyleBar。

(3)在CMainFrame类的OnCreate函数中创建工具栏,函数实现代码如下。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
      if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
            return -1;
      const int nDropHeight = 100;
      //创建工具栏
    if (!m_wndStyleBar.Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP|
                  CBRS_TOOLTIPS|CBRS_FLYBY, 15000) ||
            !m_wndStyleBar.LoadBitmap(IDB_STYLES) ||                                         //加载工具栏图标
            !m_wndStyleBar.SetButtons(styles, sizeof(styles)/sizeof(UINT)))        //为工具栏添加按钮
      {
            TRACE0("Failed to create stylebar\n");
            return FALSE;
      }
      m_wndStyleBar.SetButtonInfo(0, 12000, TBBS_SEPARATOR, 50);                 //设置指定工具栏按钮的宽度
      m_wndStyleBar.SetButtonInfo(1, ID_SEPARATOR, TBBS_SEPARATOR, 12);       //设置指定工具栏按钮的样式
      CRect rect;
      m_wndStyleBar.GetItemRect(0, &rect);                                                        //获取指定按钮的区域
      rect.top = 3;
      rect.bottom = rect.top + nDropHeight;
      if (!m_wndStyleBar.m_comboBox.Create(
                  CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP,
                  rect, &m_wndStyleBar, 12000))                                                       //创建组合框
      {
            TRACE0("Failed to create combo-box\n");
            return FALSE;
      }
      return 0;
}      

05. 秘笈心法

增强工具栏的创建

在工具栏上不仅可以显示组合框控件,还可以显示编辑框和标签控件,其实现的思路都是一样的,就是先生成工具栏按钮,然后获取按钮的区域,最后在该区域内创建想要创建的控件。

06. 源码下载

下载:

07. 附录

继续阅读