创建一个简单的工具栏控件
2007-09-21 17:34
260 查看
Windows 的两个 API 函数 CreateWindowEx() 和 CreateToolbarEx() 都可以用来创建工具栏,但 CreateWindowEx() 调用起来会更加简单一些,所以 MFC 在对工具栏进行封装的时候也作出了这样的选择。
如何创建工具栏,这里就不再多费口舌了,直接看以下的示例代码。
代码中所使用到的字符串资源定义如下:
#define IDR_TOOLBAR1 131
BOOL CTest_ToolbarCtrlDlg::CreateAToolBar()
{
DWORD dwStyle = WS_CHILD;
if (!m_tbCtrl.Create(dwStyle, CRect(0, 0, 0, 0), this, IDR_TOOLBAR1))
{
ASSERT(FALSE);
return FALSE;
}
CString strText(_T(""));
// Fill the TBBUTTON array with button information, and add the
// buttons to the toolbar. The buttons on this toolbar have text
// but do not have bitmap images.
TBBUTTON tbb[3];
tbb[0].iBitmap = -1;
tbb[0].idCommand = IDS_CUT;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].dwData = 0;
strText.LoadString(IDS_CUT);
CString strCut(strText, strText.GetLength()+1);
tbb[0].iString = m_tbCtrl.AddStrings(strCut);
tbb[1].iBitmap = -1;
tbb[1].idCommand = IDS_COPY;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].dwData = 0;
strText.LoadString(IDS_COPY);
CString strCopy(strText, strText.GetLength()+1);
tbb[1].iString = m_tbCtrl.AddStrings(strCopy);
tbb[2].iBitmap = -1;
tbb[2].idCommand = IDS_PASTE;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = TBSTYLE_BUTTON;
tbb[2].dwData = 0;
strText.LoadString(IDS_PASTE);
CString strPaste(strText, strText.GetLength()+1);
tbb[2].iString = m_tbCtrl.AddStrings(strPaste);
m_tbCtrl.AddButtons(sizeof(tbb)/sizeof(tbb[0]), tbb);
m_tbCtrl.AutoSize();
m_tbCtrl.ShowWindow(SW_SHOW);
return TRUE;
}
创建工具栏的时候,我们可以通过指定不同的工具条样式(Style)来定制其界面。在这篇文章中,我们主要探讨TBSTYLE_FLAT,TBSTYLE_LIST 和 TBSTYLE_TRANSPARENT 三种工具条样式,以及它们对工具栏界面的影响。
工具栏的样式可分为两种,MSDN 中将它们称为 Toolbar Control Styles 和 Toolbar Extended Styles,后者目前只在实现工具栏下拉按钮的时候才会用到,暂时跳过。
表1:Toolbar Control Styles
TBSTYLE_FLAT,TBSTYLE_LIST 和 TBSTYLE_TRANSPARENT 是最常用的三种工具栏样式,使用得当的话,已经能够满足绝大部分的界面需求。在实际工作中,有些界面开发的新同事在没有透彻了解一个控件的用法之前,经常会动辄就认为只有通过自绘控件才能实现他们想要的界面效果,殊不知一些通过自绘很费周折才能实现的效果,可能系统控件本身已经支持,工具栏的平面效果和透明效果就是一例。
从 MSDN 里面抓了些图,希望能加深大家的记忆。
图1:TBSTYLE_FLAT 和 TBSTYLE_TRANSPARENT 样式组合应用的工具栏
图2:TBSTYLE_FLAT 和 TBSTYLE_LIST 样式组合应用的工具栏
如何创建工具栏,这里就不再多费口舌了,直接看以下的示例代码。
Sample Code
以下代码在对话框中创建了一个工具栏,并添加了三个带文字的工具栏按钮。代码中所使用到的字符串资源定义如下:
IDS_CUT | 剪切(&T) |
IDS_COPY | 复制(&C) |
IDS_PASTE | 粘贴(&P) |
BOOL CTest_ToolbarCtrlDlg::CreateAToolBar()
{
DWORD dwStyle = WS_CHILD;
if (!m_tbCtrl.Create(dwStyle, CRect(0, 0, 0, 0), this, IDR_TOOLBAR1))
{
ASSERT(FALSE);
return FALSE;
}
CString strText(_T(""));
// Fill the TBBUTTON array with button information, and add the
// buttons to the toolbar. The buttons on this toolbar have text
// but do not have bitmap images.
TBBUTTON tbb[3];
tbb[0].iBitmap = -1;
tbb[0].idCommand = IDS_CUT;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].dwData = 0;
strText.LoadString(IDS_CUT);
CString strCut(strText, strText.GetLength()+1);
tbb[0].iString = m_tbCtrl.AddStrings(strCut);
tbb[1].iBitmap = -1;
tbb[1].idCommand = IDS_COPY;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].dwData = 0;
strText.LoadString(IDS_COPY);
CString strCopy(strText, strText.GetLength()+1);
tbb[1].iString = m_tbCtrl.AddStrings(strCopy);
tbb[2].iBitmap = -1;
tbb[2].idCommand = IDS_PASTE;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = TBSTYLE_BUTTON;
tbb[2].dwData = 0;
strText.LoadString(IDS_PASTE);
CString strPaste(strText, strText.GetLength()+1);
tbb[2].iString = m_tbCtrl.AddStrings(strPaste);
m_tbCtrl.AddButtons(sizeof(tbb)/sizeof(tbb[0]), tbb);
m_tbCtrl.AutoSize();
m_tbCtrl.ShowWindow(SW_SHOW);
return TRUE;
}
创建工具栏的时候,我们可以通过指定不同的工具条样式(Style)来定制其界面。在这篇文章中,我们主要探讨TBSTYLE_FLAT,TBSTYLE_LIST 和 TBSTYLE_TRANSPARENT 三种工具条样式,以及它们对工具栏界面的影响。
工具栏的样式可分为两种,MSDN 中将它们称为 Toolbar Control Styles 和 Toolbar Extended Styles,后者目前只在实现工具栏下拉按钮的时候才会用到,暂时跳过。
Toolbar Control Styles
Windows 定义了一系列以 TBSTYLE_ 开头的宏,这很容易会让人认为这些宏定义就是 Toolbar Control Styles。其实非也,这些宏定义可以分为两类:Toolbar Control Sytles 和 Toolbar Button Styles。表1:Toolbar Control Styles
TBSTYLE_ALTDRAG | 涉及通过拖拽调整工具栏按钮方面的技术,暂时跳过 |
TBSTYLE_CUSTOMERASE | 涉及工具栏自绘方面的技术,暂时跳过 |
TBSTYLE_FLAT | 创建平面工具栏 |
TBSTYLE_LIST | 工具栏按钮可以支持同时显示图标和文字。默认情况下,文字位于图标下方,指定此样式之后,文字位于图标右边 |
TBSTYLE_REGISTERDROP | 涉及通过拖拽调整工具栏按钮方面的技术,暂时跳过 |
TBSTYLE_TOOLTIPS | 使工具栏支持显示 ToolTips,会在以后的专题中进行讨论,暂时跳过 |
TBSTYLE_TRANSPARENT | 创建透明工具栏 |
TBSTYLE_WRAPABLE | 使工具栏支持分行显示各个工具栏按钮,会在以后的专题中进行讨论,暂时跳过 |
从 MSDN 里面抓了些图,希望能加深大家的记忆。
图1:TBSTYLE_FLAT 和 TBSTYLE_TRANSPARENT 样式组合应用的工具栏
图2:TBSTYLE_FLAT 和 TBSTYLE_LIST 样式组合应用的工具栏
相关文章推荐
- 创建一个简单的文本图片聊天工具
- [原创]WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具 - Part I
- 安装C语言集成开发工具Eclipse For C并创建一个简单的示例项目HelloWorld
- WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具[上篇]
- [原创]WCF后续之旅(13):创建一个简单的SOAP Message拦截、转发工具-Part II
- 创建一个Storyboard工程 storyboard是在ios5中引入的新控件,能够更加清晰、简单的整合多个ViewController的关系,下面主要介绍一下怎么初建一个storyboard的工程
- WCF后续之旅(13):创建一个简单的SOAP Message拦截、转发工具[下篇]
- 创建一个简单的maven web项目
- Expression Bland 入门视频(二) 创建一个用户控件
- [转]Artech的WCF之旅(1):创建一个简单的WCF程序
- 使用bower+angular+express创建webapp(一)一个简单的demo
- 一个简单的滚轮选取控件
- android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
- 动画概述 一,创建一个简单的属性动画
- 基于 Zen 创建一个 Drupal 7 的主题(模板) ,一份简单的Drupal模板教程
- 创建一个简单的WCF程序
- mapbox js创建一个简单的demo
- titanium开发教程-04-03创建一个简单的table
- Android高效的应用程序开发工具集1---ant构建一个简单的Android工程
- 在iOS上实现一个简单的日历控件