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. 附录

参考: 《Visual C++从入门到精通(项目案例版)》