CMFCRibbonBar及其他Ribbon类的使用

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

参考资料:msdn

视频:微软的1  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元素文字颜色的方法

先看效果图

第一个是默认的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("简单查询"));

运行的时候效果如下图


如果我的文字解决了你的问题,请打个赏的,让我更有动力:)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值