我每次做软件界面时,总是大费周折,老也弄不好这个vs2008 office Ribbon风格,今天查了些资料,又结合我最近做的红外数据处理的软件的界面,把Ribbon的固定的操作给小小总结下。
正如网上说的,这个Ribbon分为三个等级,从大到小分别为:Category(分类),pannel(面板)和元素(元素包括按钮,复选框等);
所以一般在一个vs2008MFC程序下,在CMainFrame中的InitialRibbon函数中会生成很多默认的一些菜单按钮项,注释掉不想要的,写我们自己需要的。
首先,定义一个Category,
代码:
strTemp = "图像";
CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);
这个addCategory函数,后面两个参数,是要缴入图标的ID,这里vs2008资源里有很多自带的图标,选一组自己喜欢的,也可以自己画的图标,导入进去,至于自己画的导进去的我目前还没有尝试,等我下步做到那再写吧,现在随便选的图标组。
然后,生成面板,
代码:
strTemp = "导入图像视图面板";
CMFCRibbonPanel *pPanelView = pCategoryHome->AddPanel(strTemp,m_PanelImages.ExtractIcon(0));
这个里面参数没太研究是怎么回事,改变里面的设置,没有发现什么变化,所以先不说了。
最后就是要加上自己所有添加的按钮了。
代码:
strTemp = "导入图像";
pPanelView->Add(new CMFCRibbonButton(ID_IMAGE_OPEN,strTemp,0,1));
strTemp = "点选图像标志点";
pPanelView->Add(new CMFCRibbonButton(ID_SELECT_POINT,strTemp,0,4));
strTemp = "图像校正";
pPanelView->Add(new CMFCRibbonButton(ID_IMAGE_ADJUST,strTemp,0,6));
strTemp = "图像保存";
pPanelView->Add(new CMFCRibbonButton(ID_IMAGE_SAVE,strTemp,0,3));
这里CMFCRibbionButton参数中,第一个参数是我们再自由menu里事先设定好的菜单按钮ID号,最后两个参数为bitmap图标组里对应的图标号,据说是小图标和大图标,这个大小如何控制我也不太清楚,主要改变最后一个参数控制改变不太图标。
这样一组分类界面就完成了。如果想再来一组,按照上面步骤,申请不同的category 及pannel和buttom就行了,但是不要忘记使用不同的变量。
把我程序的代码贴上了,
strTemp = "温度数据";
CMFCRibbonCategory *pCategoryHome2=m_wndRibbonBar.AddCategory(strTemp, IDB_FILESMALL,IDB_FILELARGE);
#pragma Region WFC;
strTemp = "数据修正面板";
CMFCRibbonPanel *pPanelView2 = pCategoryHome2->AddPanel(strTemp,m_PanelImages.ExtractIcon(2));
strTemp = "读入红外温度";
pPanelView2->Add(new CMFCRibbonButton(ID_OPEN_IR_TEMP,strTemp,0,5));
strTemp = "读入传感器温度";
pPanelView2->Add(new CMFCRibbonButton(ID_OPEN_PROBE_TEMP,strTemp,0,8));
strTemp = "温度修正";
pPanelView2->Add(new CMFCRibbonButton(ID_TEMP_CONV,strTemp,0,7));
strTemp = "温度保存";
pPanelView2->Add(new CMFCRibbonButton(ID_TEMP_SAVE,strTemp,0,2));
#pragma end ;
strTemp = "温度场";
CMFCRibbonCategory *pCategoryHome3=m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE);
#pragma Region WFC;
strTemp = "选择要显示的温度";
CMFCRibbonPanel *pPanelView3 = pCategoryHome3->AddPanel(strTemp,m_PanelImages.ExtractIcon(2));
strTemp = "显示温度场";
pPanelView3->Add(new CMFCRibbonButton(ID_OPEN_IR_TEMP,strTemp,0,0));
strTemp = "温度场保存";
pPanelView3->Add(new CMFCRibbonButton(ID_OPEN_PROBE_TEMP,strTemp,0,1));
#pragma end ;
界面运行完了如下图,