在单文档或者多文档中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/