最近想使用mfc+ribbon的面板格式,看着好看些,可是遇到的问题层出不穷。首先是对Ribbon的菜单按钮添加好看的图标,百度了一下倒是挺简单的,首先是用制作图标的一个工具IconWorkShop将几个制作好的图标(png格式)做成一个连续的大图标,因为ribbon中需要设置catagory的图标,然后可以根据图标的顺序来选着图标,此方法比较简单,
但是问题就出现了,假如我想增加一个按钮,可是原来的“图标序列”中没有想要的图标怎么办。一个办法就是重新制作一个图标序列然后,将想要的图标添加进去。此法可行,但是在开发过程中想改的东西可是比较多,每次更改都重新制作“图标序列”是比较麻烦的。程序员不禁会问,有没有通过程序更改来实现这些功能呢,答案是有的,整体思路是将按钮图标添加到一个图标(ImageList),然后不同的按钮再去使用不同的图标序列,具体步骤如下。
首先,在MainFram.h中新建一个CImageList的对象m_ImageList,并且定义一个初始化函数void InitRibbon(),程序中会自带一个CMFCRibbonBar的对想m_wndRibbonBar,并且在MainFram.cpp 的OnCreate 中也会初始化m_wndRibbonBar对象。
然后在MainFram.cpp的函数中定义InitRibbon();
void MainFram::InitRibbon()
{
////初始化m_ImageList对象
m_Imagelist.Create(32,32,ILC_COLOR32,2,1);
////导入图标
HICON hIcon = AfxGetApp()-> LoadIcon(IDI_ICON1);
//将图标添加到m_ImageList序列
m_Imagelist.Add(hIcon);
/////获取pannel
CMFCRibbonPanel* p_hotkey= m_wndRibbonBar.GetCategory(1)- >AddPanel(_T(""),hIcon);
//////按列居中
p_hotkey->SetCenterColumnVert(1);
//添加新的按钮
CMFCRibbonButton* p_key1=new CMFCRibbonButton(1,_T("帮 助"),hIcon);//这里的第三个参数用第三部的图片句柄
p_hotkey->Add(p_key1);///将按钮添加到pannel中
/////// 给按钮添加点击事件
}