在单文档或者多文档中MFC程序中,toolbar控件在程序工程生成时会自动创建,也可以手动添加,但是在对话框中需要手动添加toolbar控件,在对话框中添加该控件的方法很多,下面介绍一种可实现的方案。
一、在对话框中添加控件。
步骤1: 新建一个工程toolbox对话框工程,删除多余控件。
步骤2:添加加一个resource,new->toolbar,修改ID为IDR_TOOLBAR
步骤3:添 加图标,将图片资源导入到ICON中,作为toolbar图标,并且修改资源ID分表为IDC_ICON_OPEN、IDC_ICON_CUT、IDC_ICON_PRINT等等(下面是我的测试图标)
步骤4:在 toolbar中添加打开、剪切、打印、等按钮,并且修改ID为IDC_BTN_OPEN、IDC_BTN_CUT等等。
步骤5:在对话框中头文件中中添加如下类声明,在OnInitDialog函数中添加初始化代码:
//toolboxDlg.h
CImageList m_ImageList;
CToolBar m_ToolBar; //Toolbar 类
//OnInitDialog()函数中初始化代码:
m_ImageList.Create(64,64,ILC_COLOR32|ILC_MASK,1,1);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_OPEN));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_CUT));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ZOOM));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_PRINT));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_STOP));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_EXIT));
UINT btnarray[6]={0};
for (int i=0;i<6;i++)
{
btnarray[i]=3000+i;
}
//设置工具条信息
m_ToolBar.Create(this);
m_ToolBar.SetButtons(btnarray,6);
m_ToolBar.SetButtonText(0,_T("打开"));
m_ToolBar.SetButtonInfo(0,IDC_BTN_OPEN,TBSTYLE_BUTTON,0);
m_ToolBar.SetButtonText(1,_T("剪切"));
m_ToolBar.SetButtonInfo(1,IDC_BTN_CUT,TBSTYLE_BUTTON,1);
m_ToolBar.SetButtonText(2,_T("放大"));
m_ToolBar.SetButtonInfo(2,IDC_BTN_ZOOM,TBSTYLE_BUTTON,2);
m_ToolBar.SetButtonText(3,_T("打印"));
m_ToolBar.SetButtonInfo(3,IDC_BTN_PRINT,TBSTYLE_BUTTON,3);
m_ToolBar.SetButtonText(4,_T("停止"));
m_ToolBar.SetButtonInfo(4,IDC_BTN_STOP,TBSTYLE_BUTTON,4);
m_ToolBar.SetButtonText(5,_T("退出"));
m_ToolBar.SetButtonInfo(5,IDC_BTN_STOP,TBSTYLE_BUTTON,5);
//设置工具条大小,文字大小以及图标大小
m_ToolBar.GetToolBarCtrl().SetButtonWidth(80,80);
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ToolBar.SetSizes(CSize(80,80),CSize(64,64));
m_ToolBar.EnableToolTips(TRUE);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
编译运行可见如下效果:
二、给toolbar按钮添加消息响应函数。
给按钮添加消息映射的方法可以通过控件的IDC在对话框的DoDataExchange类中进行绑定,这样每次点击按钮会触发对应的消息函数,当然也需要事先定义类似于afx_msg void OnBnClickedCancel();但是有一种更加底层的方法就是重载对话框的OnCmdMsg()函数. 函数的介绍自己看百度:http://baike.baidu.com/view/1856178.htm?fr=aladdin,重载的方法是在classview中找到对话框类,鼠标移动到蓝色小方格中时会出现override字样,表示重载。在可以重载的函数列表中找到OnCmdMsg()函数,点击添加按钮,然后在函数中添加如下代码:
需要添加的代码(我这里只是演示,弹出消息提示按钮按下,大家可以添加自己的处理代码):
if ( nCode == BN_CLICKED )
{
switch(nID)
{
case IDC_BTN_OPEN:
// ADD you operation
AfxMessageBox(_T("打开按钮消息触发!"));
break;
case IDC_BTN_CUT:
AfxMessageBox(_T("剪切按钮消息触发!"));
break;
case IDC_BTN_PRINT:
AfxMessageBox(_T("打印按钮消息触发!"));
break;
case IDC_BTN_ZOOM:
AfxMessageBox(_T("zoom按钮消息触发!"));
break;
case IDC_BTN_STOP:
AfxMessageBox(_T("停止按钮消息触发!"));
break;
case IDC_BTN_EXIT:
OnCancel();
//PostMessage(WM_QUIT);
break;
}
}
编译运行点击打开按钮后出现以下消息弹出:
本演示程序在XP环境VS2008中开发:如果需要点击这里下载:http://qiannao.com/file/keji1991/85c5fda4/
