创建一个简单的工具栏控件

原创 2007年09月21日 17:34:00
    Windows 的两个 API 函数 CreateWindowEx() 和 CreateToolbarEx() 都可以用来创建工具栏,但 CreateWindowEx() 调用起来会更加简单一些,所以 MFC 在对工具栏进行封装的时候也作出了这样的选择。
 
如何创建工具栏,这里就不再多费口舌了,直接看以下的示例代码。
 

Sample Code

以下代码在对话框中创建了一个工具栏,并添加了三个带文字的工具栏按钮。

代码中所使用到的字符串资源定义如下:

IDS_CUT 剪切(&T)
IDS_COPY 复制(&C)
IDS_PASTE 粘贴(&P)

  
 
 
#define IDR_TOOLBAR1 131
BOOL CTest_ToolbarCtrlDlg::CreateAToolBar()
{
 DWORD dwStyle 
= WS_CHILD;
 
if (!m_tbCtrl.Create(dwStyle, CRect(0000), 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 使工具栏支持分行显示各个工具栏按钮,会在以后的专题中进行讨论,暂时跳过

 

 

 

 



TBSTYLE_FLAT,TBSTYLE_LIST 和 TBSTYLE_TRANSPARENT 是最常用的三种工具栏样式,使用得当的话,已经能够满足绝大部分的界面需求。在实际工作中,有些界面开发的新同事在没有透彻了解一个控件的用法之前,经常会动辄就认为只有通过自绘控件才能实现他们想要的界面效果,殊不知一些通过自绘很费周折才能实现的效果,可能系统控件本身已经支持,工具栏的平面效果和透明效果就是一例。
 
 从 MSDN 里面抓了些图,希望能加深大家的记忆。


图1:TBSTYLE_FLAT 和 TBSTYLE_TRANSPARENT 样式组合应用的工具栏

 


图2:TBSTYLE_FLAT 和 TBSTYLE_LIST 样式组合应用的工具栏

在工具栏上加控件

我们经常看到  有些控件式放到工具栏上,但是我用微软工具
  • wuan584974722
  • wuan584974722
  • 2014年10月05日 17:30
  • 1064

如何创建工具栏控件!

  如上图,如何实现这样的工具 栏呢? 相信用C# 去实现WM程序 的朋友,都接触过标准的ToolBar控件 。 标准控件的不足,这里就不说了。如何实现图中的效果 呢? 首先,你需要先解...
  • zhaojiangang
  • zhaojiangang
  • 2010年11月23日 11:25
  • 869

在Windows应用程序中设计菜单栏、工具栏和状态栏

1.5.2  在Windows应用程序中设计菜单栏、工具栏和状态栏 1.菜单栏的设计 在Windows应用程序中制作菜单栏时,可以使用MenuStrip控件。使用MenuStrip控件可以...
  • laoniu541292552
  • laoniu541292552
  • 2012年07月01日 20:04
  • 3164

【初级】VS2015/MFC动态创建工具栏1(使用图标创建工具栏)

使用图标创建工具条,首先要创建图标列表,然后用工具栏关联相关图像列表,首先调用Create方法创建工具栏窗口,然后调用SetButtons方法设置工具栏按钮的索引,通过GetToolBarCtrl方法...
  • CSDNzhwk
  • CSDNzhwk
  • 2015年08月13日 21:07
  • 2135

Winform控件之菜单控件,工具栏控件和状态栏控件

菜单是用户获取应用程序中主要功能和实用程序的主要途径,如新建文件,打开文件等,这就需要用到菜单控件(MenuStrip)。工具栏另一种获取应用程序主要功能的常用方法,比起菜单要直观,这就需要用到工具栏...
  • erlian1992
  • erlian1992
  • 2015年05月27日 17:31
  • 5829

VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)

上一节中鸡啄米讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏。        工具栏简介        工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成。当用户...
  • my_lord_
  • my_lord_
  • 2016年09月01日 15:45
  • 925

用dojo写一个最简单的控件

用DOJO写一个最简单的控件 #广州# OSC源创会第31期(12月27日)开始报名,OSC自曝家丑! 现在javascript框架、控件库有很多,JQ...
  • hsg77
  • hsg77
  • 2014年12月09日 16:53
  • 1378

Visual Studio 2010——C#工具栏控件的使用

实验环境:Windows XP,Visual Studio 2010  Ultimate 1 创建项目     文件>>新建>>项目,选中“Windows窗体应用程序”,如下图所示: ...
  • Q1302182594
  • Q1302182594
  • 2013年03月30日 15:48
  • 7940

C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗口

MFC工具栏相关类: CToolBarCtrl - 父类是 CWnd  封装了工具栏控件相关操作 CToolBar - 父类是CControlBar  封装了工具栏和框架窗口之间的关系 工具栏使用: ...
  • pukuimin1226
  • pukuimin1226
  • 2014年07月30日 08:37
  • 2935

QT creator 设计创建工具栏

一、必要条件,创建工具栏之前需要创建好菜单栏,因为工具栏是菜单栏里面部分功能的快捷按钮 二、此时在界面编辑窗口的最下方有一个ACTION EDITOR 窗口,里面显示了所有的菜单内容 ...
  • TJU355
  • TJU355
  • 2012年06月11日 10:18
  • 7313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建一个简单的工具栏控件
举报原因:
原因补充:

(最多只允许输入30个字)