[置顶] CMFCRibbonBar及其他Ribbon类的使用

在VS2008 SP1中有很炫的类似OFFICE07的Ribbon主题“菜单”,研究了2天,总结下。

参考资料:msdn

视频:微软的1  2

 基本资源和类如图:

[置顶] CMFCRibbonBar及其他Ribbon类的使用_第1张图片

继承图为:图中标注的是常用的几个类

[置顶] CMFCRibbonBar及其他Ribbon类的使用_第2张图片

 

 

 

 

 

用法:

1   接着添加CMFCRibbonBar

.h中声明

CMFCRibbonBar     m_wndRibbonBar;
.cpp中
m_wndRibbonBar.Create(this);


此时得到的是一个空白的Bar

 

2   最大的那个button

 

.h中声明

CMFCRibbonApplicationButton m_MainButton;

.cpp中

m_MainButton.SetImage(IDB_MAIN);
m_MainButton.SetText(_T("/nf"));
m_MainButton.SetToolTipText(strTemp);
CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);//大按钮点击后出现的panle
//这里有32×32 和16×16两种位图资源 分别提供按钮的大小 两种图标


然后通过

pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, _T("按钮1"), 0, 0));//添加大按钮点击后出现的panle上的按钮


3   添加Category

.cpp中

//每个TAB就相当于一个Category,分别添加就可以  很简单
 
CMFCRibbonCategory *pCategory = m_wndRibbonBar.AddCategory(_T("Button"),
IDB_FILESMALL,IDB_FILELARGE);
CMFCRibbonPanel* pPanel = pCategory->AddPanel(_T("Large Button"));
CMFCRibbonButton* pButton;
pPanel->Add(new CMFCRibbonButton(ID_BUTTON_BUTTON1,_T("Button"),0,0));
pButton = new CMFCRibbonButton(ID_BUTTON_BUTTON2,_T("Menu Button"),1,1);
pButton->SetMenu(IDR_MAINFRAME);
pPanel->Add(pButton);
pButton = new CMFCRibbonButton(ID_BUTTON_BUTTON3,_T("Splitter Menu Button"),2,2);
pButton->SetMenu(IDR_MAINFRAME,TRUE);
pPanel->Add(pButton);

 

另外按钮要必须指定事件才可以是enable的状态,可以用

ON_COMMAND_RANGE(ID_BUTTON_BUTTON2, ID_BUTTON_BUTTON9,&CMFCCategoryDemoView::OnButtonButton)

 

 =====================================

在新的vs2010里 这些界面已经可以直接可视化编辑了 Resource View ----Ribbon-IDR_RIBBON

 

 =====================================

获取RibbonBar相关控件指针的方法:

CMainFrame *pMainFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;

ASSERT_VALID(pMainFrame);

//获取RibbonBar指针
CMFCRibbonBar *pRibbonBar = pMainFrame->GetRibbonBar();
ASSERT_VALID(pRibbonBar);
//获取RibbonComboBox控件指针
CMFCRibbonComboBox *pCombox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbonBar->FindByID(uiCmdID));

//使用……
pCombox->AddItem(lpszItem);


 =================================================

更新下改变CMFCRibbonStatusBar里CMFCRibbon元素文字颜色的方法

先看效果图

[置顶] CMFCRibbonBar及其他Ribbon类的使用_第3张图片

第一个是默认的CMFCRibbonButton的默认字体颜色

第二个是修改之后的CColorRibbonButton的默认字体颜色,与ribbon主题相符

方法是从CMFCRibbonButton派生出CColorRibbonButton,然后改写虚函数。DrawRibbonText代码如下

class CColorMFCRibbonBT  : public CMFCRibbonButton 
{
public:
	CColorMFCRibbonBT(UINT nID, LPCTSTR lpszText);
	
	~CColorMFCRibbonBT();
public:
	int DrawRibbonText(CDC* pDC, const CString& strText, CRect rectText, UINT uiDTFlags, COLORREF clrText = (COLORREF)-1);

protected:
private:
};

CColorMFCRibbonBT::CColorMFCRibbonBT(UINT nID, LPCTSTR lpszText ):CMFCRibbonButton(nID,lpszText)
{

}
CColorMFCRibbonBT::~CColorMFCRibbonBT()
{
}

int CColorMFCRibbonBT::DrawRibbonText(CDC* pDC, const CString& strText, CRect rectText, UINT uiDTFlags, COLORREF clrText )
{
	ASSERT_VALID(this);
	ASSERT_VALID(pDC);
	uiDTFlags = DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS;
	
	
	clrText = afxGlobalData.clrBarText;
	
	return CMFCRibbonButton::DrawRibbonText(pDC, strText, rectText, uiDTFlags, clrText);
}

应用的时候

AddElement(new CColorMFCRibbonBT(ID_STATUSBAR_LOGNAME,_T("当前登录账号为:")),_T("当前登录账号"));

就可以了

 =====================================================

更改ribbon里的字体有很简单的方法就是

m_wndRibbonBar.SetFont(&g_Font);

另外添加ribbon按钮的时候,自定义的tooltips经常显示不出来,研究了一下,原来还是有点诀窍的,方法如下:

1.添加ribbon按钮之后,设置属性prompt,这个prompt是tooltips的详细说明。

2.在代码里mainfrm初始化的时候,设置一个tooltips的大纲说明

m_wndRibbonBar.FindByID(ID_RIBBON_BUTTON_SIMPLEQUERY)->SetToolTipText(_T("简单查询"));
运行的时候效果如下图
[置顶] CMFCRibbonBar及其他Ribbon类的使用_第4张图片

你可能感兴趣的:(mfc,CMFCRibbonBar,CMFCRibbon)