添加工具栏图标按钮(转)

有三种方法可以添加工具栏的图标按钮: 
第一种:创建CImageList对象,然后往里面加图标,调用SetImageList方法添加图标,具体步骤如下: 
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)); 

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON9)); 



UINT array[11]; 

for(int i=0;i <10;i++) 

{ 

if(i= =3 || i= =7) 

array[i] = ID_SEPARATOR; //第4、第8个按钮为分隔条 

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);//加载工具栏 

如果是在文档界面,则是: 
最后一句话改成: 
EnableControlbar(CBRS_ALIGN_ANY); 
m_ToolBar.EnableControlbar(CBRS_ALIGN_ANY); 
DockControlBar(&m_Toolbar); 

如果是利用imageList添加位图时,需要创建多个图片: 
开始的代码如下: 
CBitmap bmp 
bmp.Load(IDB_MYBITMP1); 
imageList.Add(&bmp,RGB(0,0,0)); 
注意:为了使位图能够显示出来,请确保m_ToolBar.SetSizes中指定的图像尺寸要小于等于在资源编辑器中图片大小,因为MFC不能在工具按钮上缩小位图

第二种方法:为工具栏上所有的按钮创建一个统一的位图,在SetSize中指明每个位图的大小,那么MFC会自动将其切割成一个个小位图加载到按钮上. 
具体步骤如下: 
UINT array[11]; 

for(int i=0;i <10;i++) 

{ 

if(i= =3 || i= =7) 

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(40,40),CSize(32,32)); //设置按钮和按钮位图大小 

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); 
为了保证按钮位图的美观,标识符为IDB_BITMAP1的位图,其中宽度应为高度的整数倍.

CToolbar一般放在文档界面上,好处是可以和窗体熔合在一起,但是当对话框上显示CToolbar时,效果就不是很理想,这需要用到控件CToolbarCtrl,当使用此控件时,需要一个个地把按钮和图像加载到工具栏上,具体步骤如下: 
CToolBarCtrl m_Toolbar; 
CBitmap bit1; 
bit1.LoadBitmap(MAKEINTRESOURCE(IDB_BMP1)); 
CBitmap bit2; 
bit2.LoadBitmap(MAKEINTRESOURCE(IDB_BMP2)); 
CBitmap bit3; 
bit3.LoadBitmap(MAKEINTRESOURCE(IDB_BMP3)); 
m_Toolbar.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,600,23),this,156); 
m_Toolbar.AddBitmap(1,bit1); 
m_Toolbar.AddBitmap(1,bit2); 
m_Toolbar.AddBitmap(1,bit3); 
m_Toolbar.AddStrings(_T("按钮0\n按钮1\n按钮2\n"); 
TBBUTTON tb; 
tb.iBitmap=2; 
tb.idCommand=IDC_BUTTON1; 
tb.fsStyle=TBSTATE_ENABLE; 
tb.iString=1; 
tb.fsState=TBBS_BUTTON; 

TBBUTTON tb1; 
tb1.iBitmap=1; 
tb1.idCommand=IDC_BUTTON2; 
tb1.fsStyle=TBSTATE_ENABLE; 
tb1.iString=2; 
tb1.fsState=TBBS_BUTTON; 

TBBUTTON tb2; 
tb2.iBitmap=3; 
tb2.idCommand=IDC_BUTTON3; 
tb2.fsStyle=TBSTATE_ENABLE; 
tb2.iString=3; 
tb2.fsState=TBBS_BUTTON; 
TBBUTOON tbs[3]={tb,tb1,tb2}; 
m_Toolbar.AddButtons(3,tbs); 
m_Toolbar.SetButtonSize(CSize(20,20)); 
m_Toolbar.SetBitmapSize(CSize(16,16)); 
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); 

AddStrings方法用于向工具栏中添加文本串,MFC会用\n将它们分割成多个字符串,并加载到工具栏内部的字符串列表中. 

AddBitmap方法用向工具栏中添加图像,其中第一个参数表示此位图内含多少个图像,第二个参数是CBitmap对象 

对于一个TBBUTTON结构,它的iString字段就是AddString中分割符"\n"前的部分,它指示了,此字符串在工具栏字符列表中的索引.它的iBitmap字段就是AddBitmap方法添加位图的顺序.工具栏内包含默认从1开始的图像列表. 

AddButtons方法一口气将一个工具按钮数组加载到工具栏上. 

基本上创建工具栏按钮图标可以分成以下几步: 
1.创建一个工具栏对象, 
2.编辑好位图资源,并将它们加载到CImageList对象中, 
3.为一个工具栏设置按钮的数量和布局, 
4.为工具栏加载位图 
5.为工具栏的按钮设置按钮大小和图像大小, 
6.显示工具栏.

原文地址:https://www.cnblogs.com/Daywei/p/1965733.html