一、使用位图创建工具栏
1.头文件定义
CToolBar m_ToolBar;
2.BOOL CCreateToolBarDlg::OnInitDialog()
{
// TODO: Add extra initialization here
UINT array[11];
for (int i = 0;i<11;i++)
{
if (i==3 || i==7 || i==9)
array[i]= ID_SEPARATOR; //第4、8个按钮为分隔条
else
array[i]=i+1001;
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,11);
m_ToolBar.LoadBitmap(IDB_BITMAP1); //加载位图
m_ToolBar.SetSizes(CSize(24,24),CSize(16,16)); //设置按钮和按钮位图大小
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
return TRUE; // return TRUE unless you set the focus to a control
}
3.添加消息响应
声明单击处理函数
afx_msg void OnNew();
添加消息映射
ON_COMMAND(1001, OnNew)
单击处理函数
void CCreateToolBarDlg::OnNew()
{
MessageBox("工具栏按钮单击事件");
}
二、使用图标创建工具栏
1.头文件定义
CToolBar m_ToolBar;//工具栏对象
CImageList m_ImageList;//列表视图对象
2.BOOL CCreateToolBarDlg::OnInitDialog()
{
// TODO: Add extra initialization here
//创建图像列表
m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
//向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON7));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON8));
UINT array[11];
for(int i=0;i<11;i++)
{
if(i==3 || i==7 || i==9)
array[i] = ID_SEPARATOR; //第4、8、10个按钮为分隔条
else
array[i] = i+1001;
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,11);//设置工具栏按钮的索引
//关联图像列表
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ToolBar.SetSizes(CSize(40,40),CSize(32,32)); //设置按钮和图标的大小
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//显示工具栏
return TRUE; // return TRUE unless you set the focus to a control
}
三.使用工具栏资源创建工具栏
BOOL CCreateToolBarDlg::OnInitDialog()
{
// TODO: Add extra initialization here
//创建工具栏
m_ToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP);
m_ToolBar.LoadToolBar(IDR_TOOLBAR1); //加载工具栏资源
//设置图象和按钮的大小
m_ToolBar.GetToolBarCtrl().SetBitmapSize(CSize(16,16));
m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(24,24));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
return TRUE; // return TRUE unless you set the focus to a control
}
四、设置工具栏按钮提示
只要鼠标停留在一个工具栏按钮上,就会显示出这个按钮的功能描述可以通过TTN_NEEDTEST消息的处理函数OnToolTipNotify实现,然后调用SetButtonText方法设置工具栏按钮文本
1.SetButtonText
BOOL SetButtonText(int nlndex,LPCTSTR lpszText);nIndex:按钮命令ID
lpszText:按钮显示文本
然后在OnToolTipNotify消息处理函数中获得当前按钮文本,并在提示窗口中显示出来,获得按钮文本可以使用GetButtonText方法。
2.GetButtonText
CString GetButtonText(int nLndex)const;void GetButtonText(int nIndex,CString&rString)const;
nIndex:按钮索引
rString:用于接收文本按钮
五、具有提示功能的工具栏
1.新建对话框,导入八个图标资源
2.对话框头文件声明变量
CToolBar m_ToolBar;
CImageList m_ImageList;
CString m_TipText;
3.对话框OnInitDialog创建工具栏
// TODO: Add extra initialization here
//创建图像列表
m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
//向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON7));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON8));
UINT array[11];
for(int i=0;i<11;i++)
{
if(i==3 || i==7 || i==9)
array[i] = ID_SEPARATOR; //第4、8、10个按钮为分隔条
else
array[i] = i+1001;
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,11);
m_ToolBar.SetButtonText(0,"新建");//设置工具栏按钮文本
m_ToolBar.SetButtonText(1,"打开");
m_ToolBar.SetButtonText(2,"保存");
m_ToolBar.SetButtonText(4,"剪切");
m_ToolBar.SetButtonText(5,"复制");
m_ToolBar.SetButtonText(6,"粘贴");
m_ToolBar.SetButtonText(8,"打印");
m_ToolBar.SetButtonText(10,"帮助");
//关联图像列表
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ToolBar.SetSizes(CSize(40,50),CSize(32,32)); //设置按钮和图标的大小
m_ToolBar.EnableToolTips(TRUE);//激活工具提示功能
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
return TRUE; // return TRUE unless you set the focus to a control
4.对话框头文件声明OnToolTipNotyfy函数
afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
5.添加映射
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)
6.添加处理函数
BOOL CToolTipDlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID =pNMHDR->idFrom; //获取工具栏按钮ID
if(nID)
{
UINT nIndex = m_ToolBar.CommandToIndex(nID); //根据ID获取按钮索引
if(nIndex != -1)
{
m_ToolBar.GetButtonText(nIndex,m_TipText);//获取工具栏文本//获取工具栏文本
pTTT->lpszText = m_TipText.GetBuffer(m_TipText.GetLength()); //设置提示信息文本
pTTT->hinst = AfxGetResourceHandle();//获取资源句柄
return TRUE;
}
}
return FALSE;
}