您的位置:首页 > 其它

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

2007-09-21 17:34 260 查看
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(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使工具栏支持分行显示各个工具栏按钮,会在以后的专题中进行讨论,暂时跳过
TBSTYLE_FLAT,TBSTYLE_LIST 和 TBSTYLE_TRANSPARENT 是最常用的三种工具栏样式,使用得当的话,已经能够满足绝大部分的界面需求。在实际工作中,有些界面开发的新同事在没有透彻了解一个控件的用法之前,经常会动辄就认为只有通过自绘控件才能实现他们想要的界面效果,殊不知一些通过自绘很费周折才能实现的效果,可能系统控件本身已经支持,工具栏的平面效果和透明效果就是一例。

从 MSDN 里面抓了些图,希望能加深大家的记忆。



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




图2:TBSTYLE_FLAT 和 TBSTYLE_LIST 样式组合应用的工具栏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐