注:本文代码采用VS2005编写并使用Unicode字符集。
工具栏指的就是被篮圈的那部分。
创建一个工具栏:
我们可以仿照程序的工具栏,创建自己的工具栏。
首先在资源视图添加一个ToolBar资源,ID改为IDR_MYTOOLBAR
然后在框架类里添加一个CToolBar类型的成员变量m_myToolBar;
在框架的OnCreate函数实现里添加如下代码:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MYTOOLBAR)) //应用程序已有一个工具栏,所以我们创建在底部
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
以上代码先创建了一个toolbar然后载入之。
如果希望工具栏可停靠,添加以下代码在相同位置
<span style="font-size:14px;"> m_myToolBar.EnableDocking(CBRS_ALIGN_ANY); //工具栏可以停靠在任意位置
//EnableDocking(CBRS_ALIGN_ANY); //让框架允许任意位置的停靠,已经有了就不必再写
DockControlBar(&m_myToolBar);</span>
给工具栏的按钮添加文字:
CToolBar类中有一个SetButtonText方法,比如要给第一个索引添加一个“创建”;
<span style="font-size:14px;"> m_myToolBar.SetButtonText(0,_T("创建"));</span>
注意,你添加了几个按钮,就要给几个按钮都设置文字才能显示出来。这时我们启动会发现文字根本没有显示出来,这是因为按钮的高度不够,所以需要修改。
CToolBar有一个SetHeight方法,不过此方法之前必须使用setSizes方法,此方法需要两个参数,第一个是按钮的大小,第二个是按钮贴图的大小。
先获取按钮的大小:
<span style="font-size:14px;"> CRect reButton;
m_myToolBar.GetItemRect(0,&reButton);
SIZE szButton = {reButton.Width(),reButton.Height()}; // 设置按钮大小只接受SIZE结构体
</span>
按钮贴图的大小在资源视图里可以看到,通常为16*15;
RECT reImage = {16,15};
设置按钮的大小:
m_myToolBar.SetSizes(szButton,szImage);
m_myToolBar.SetHeight(reButton.Height());
至此,给按钮添加文字就写完啦。
给工具栏按钮添加消息:
同样,声明,实现,消息映射,例子如下:
声明:
public:
void onMyToolBar(UINT ID);
消息映射:
ON_COMMAND_RANGE(ID_BUTTON32771,ID_BUTTON32772,&CMainFrame::onMyToolBar)
实现:
void CMainFrame::onMyToolBar(UINT ID)
{
switch (ID)
{
case ID_BUTTON32771:
MessageBox(_T("he"));
break;
case ID_BUTTON32772:
MessageBox(_T("ha"));
}
}
在工具栏的按钮位置添加其他的控件:
比如我要在第一个按钮的位置添加一个CCombobox控件:
为了程序的扩展性,我们再添加一个类,继承于CComboBox,起名为CMyComboBox;别忘了包含头文件哦
在框架类中定义个combobox,用我们的类,
CMyComboBox m_myComboBox;
加入combox以后,我们需要修改toolbar的样式,否则控件会显示不完全。
m_myToolBar.SetButtonInfo(0,ID_BUTTON32772,TBBS_SEPARATOR,100); //toolbar的按钮索引(第二个位置),ID号可以不变,变为分隔符样式,宽度设置为50(按需要设定)
设置完大小以后,需要获得修改后按钮的大小,用上面定义的reButton接一下
m_myToolBar.GetItemRect(0,&reButton);
修改矩形结构体底部坐标,是的combox拉下来以后能显示出来。
reButton.bottom += 100;
创建一个combobox并显示在工具栏上面:
m_myComboBox.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,reButoon,&m_myToolBar,ID_COMBOBOX); //ID需要自己添加
让ComboBox响应事件:
我们已经有了自己的Combobox类,只要添加一个消息就可以了,很简单。