在MFC对话框中使用Toolbar控件

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