1、用API创建工具栏,简单例子
之前定义了一个由3个16*16组成的位图,准备创建一个具有三个按钮的工具栏
TBBUTTON tbButtons[]={
{0,100,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},
{1,200,TBSTATE_ENABLED,TBSTYLE_BUTTON|TBSTATE_WRAP|TBSTATE_ENABLED ,0,0},
{2,300,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}
};
CreateToolbarEx(hWnd,WS_CHILD|WS_VISIBLE|TBSTYLE_FLAT,.....,16,16,16,16,sizeof(TBBUTTON));
这样即可:
其中:TBBUTTON结构中的第一元素为:按钮索引,接下来为:按钮的ID,按钮的初始风格等
2、用MFC的CToolBarCtrl类创建
CRect rt;
GetClientRect(&rt);
rt.bottom = rt.top + 24;
m_ctlTB.Create(WS_CHILD|WS_VISIBLET|BSTYLE_FLAT,rt,this,ID_TOOLBAR);
m_ctlTB.AddBitmap(3,IDB_BITMAP1);
m_ctlTB.AddButtons(3,tbButtons);
CToolBarCtrl只是API的简单包装,并没增加功能
3、用MFC的CToolBar类创建
可参考的例子很多,MSDN的例子:MFCIE介绍了如何创建类似IE的具有文字标签和下拉菜单风格的按钮
方法1:
构造CToolBar对象
CToolBar::Create或CToolBar::CreateEx创建工具栏
CToolBar::LoadToolBar加载位图
方法2:
构造CToolBar对象
CToolBar::Create或CToolBar::CreateEx创建工具栏
CToolBar::LoadBitmap加载位图
CToolBar::SetButtons设置按钮ID
两种方法区别在于是否利用toolbar资源
4、为什么工具栏用256以上就会失真
工具栏内部应该以ImageList管理位图,而默认是采用16色。为了使用256以有更高色
必须以ILC_COLOR8(256)或相应的值创建ImageList。
然后TB_SETIMAGELIST消息给工具栏设置新的ImageList ,以同样的方法还可以设置工具栏的热点位图。
建议参考MSDN sample的<MfcIe>
5、工具栏的风格:
在MSDN中按《Toolbar Control and Button Styles》索引即可得到所有风格。有些风格对
版本有要求,更详细请看MSDN。
TBSTYLE_FLAT: 使工具栏上的按钮表面平坦,按钮边界不会被绘出来,除非鼠标指针在上面
TBSTYLE_LIST: 按钮文本显示在按钮的左边
TBSTYLE_TOOLTIPS:如果用户将鼠标指针停留在按钮上较长时间就使按钮产生TTN_NEEDTEXT通知消息。
程序员负责为这个工具提示提供文本
TBSTYLE_WRAPABLE:使控件将其按钮排成多行以适应当前的控件大小
TBSTYLE_ALTDRAG:允许用户按住ALT来拖动按钮的位置
TBSTYLE_CUSTOMERASE:使控件处理WM_ERASEBKGND 消息时会产生NM_CUSTOMDRAW通知消息
TBSTYLE_TRANSPARENT:除按钮以外工具栏是透明的,文本显示在按钮下面
扩展风格:
TBSTYLE_EX_DRAWDDARROWS :使工具栏能创建具有下拉菜单的按钮
还可以使用以CBRS开头的控制条风格:
CBRS_TOP 控制条在框架窗口的顶部
CBRS_BOTTOM
CBRS_NOALIGN 当框架窗口改变大小时控制条不重置
CBRS_TOOLTIPS 控制条显示TOOPTIP信息
CBRS_SIZE_DYNAMIC
CBRS_SIZE_FIXED
CBRS_FLOATING
CBRS_FLYBY
CBRS_HIDE_INPLACE
还有以CCS开头的通用控件风格:
CCS_NORESIZE: 被创建的控制条的大小由CreateWindow API调用指定。该风格忽略以下4种风格
CCS_TOP: 控制条沿其父窗口框架顶部/底部/左/右对齐并且其宽度设置为系统标准
CCS_BOTTOM:
CCS_LEFT:
CCS_RIGHT:
CCS_NODIVIDER: 控制条自动沿其顶部绘制一条直线:通常用来将工具栏和菜单分隔开
CCS_ADJUSTABLE: 允许用户动态配置工具栏
CCS_NOMOVEY: 下面风格没有明显效果或是重复上面的风格
CCS_NOMOVEEX:
CCS_NOPARENTALIGN:
除此之处还有工具栏按钮的风格和按钮的状态。