关闭

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

标签: 工具stylesbuttonlistwindowsmfc
2276人阅读 评论(1) 收藏 举报
分类:
    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 样式组合应用的工具栏

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50811次
    • 积分:715
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:1篇
    • 译文:0篇
    • 评论:9条
    最新评论