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

原创 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 样式组合应用的工具栏

通过CEdit派生类让MFC中的Edit支持Ctrl+A全选功能

类别选“MFC”,模板选择“MFC类”,选好后,点击“添加(A)”按钮得到下面界面。 在CEditEx类中,重写PreTranslateMessage函数,为了支持双击全选功能,我们同时处理WM...

::GetDlgItem调用 窗口控件遇到的中断 (自己遇到的问题,已被解决)

BOOL CDlgShape::OnInitDialog() { CDialog::OnInitDialog(); //CString strWFSVersion = _T("1.0.0"); //C...

win32sdk学习-简单的创建一个自己的工具栏

window程序中常使用的一个组件,就是工具栏了,基本上工具栏都是和菜单的选择是对应的。 在win32 api中有一个专门创建工具栏的函数(尽管msdn上说不建议使用) CreateToolbar...
  • sujudz
  • sujudz
  • 2012年10月10日 08:40
  • 4343

利用UtilityLibrary.dll WeifenLuo.WinFormsUI.Docking.dll控件创建工具栏效果

需求: 1.四个窗体 MainToolWindow(左边工具栏),MainForom(主窗体),form1(常规窗体) form2(测试窗体) 2. 需要两个文件 UtilityLibrary...

3.2.2 工具栏上动态创建控件combobox

p120,单文档 // MainFrm.h : interface of the CMainFrame class // ////////////////////////////////////...

工具栏上创建ComboBox组合框控件,框架响应消息

点击打开链接 由于业务需要,在原有程序的基础上需要增加几项新的功能。主程序是没有顶部菜单的MDI窗口,考虑在多视环境下的操作实现比较麻烦,故采用主框架响应组合框的消息函数。 创建ComboBox...
  • h_h_w
  • h_h_w
  • 2013年08月08日 14:18
  • 941

自己动手编写一个VS插件(三)——创建工具栏之一

作者:朱金灿来源:http://blog.csdn.net/clever101          让我们继续开发一个VS插件。上次我们谈论了OnConnection函数,这次我们实现如何在插件中创建一...

自己动手编写一个VS插件(四)——创建工具栏之二

作者:朱金灿来源:http://blog.csdn.net/clever101          上次我们提到SatelliteDllName和SatelliteDllPath这两个注册表项。VS插件...

ADO -- 派生一个简单的 DBGrid 控件

  • 2006年02月23日 09:05
  • 70KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建一个简单的工具栏控件
举报原因:
原因补充:

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