MFC Ribbon Category 实现Tab页切换消息响应
标签:
mfcvs2010/mfc |
分类: 编程 |
1. 在MFC的类向导 中 MainFrm框架类 中添加一个自定义消息(英文版为Custum Message):AFX_WM_ON_CHANGE_RIBBON_CATEGORY,(勾选“已注册的消息”)
http://pic002.cnblogs.com/images/2012/123794/2012072611361454.jpgRibbon
LPARAM CMainFrame::OnRibbonCategoryChanged(WPARAM wp, LPARAM lp)
{
CMFCRibbonCategory *pCategory=m_wndRibbonBar.GetActiveCategory();
int nCategory=m_wndRibbonBar.GetCategoryIndex(pCategory);
//... Do Something!
return 0;
}
nCategory变量存储当前激活Category的Index,范围从1开始,并非是0,Category的Index序号从左至右递增。
2. 让第一个选项卡(分类)处于显示(激活)状态:
m_wndRibbonBar.SetActiveCategory(m_wndRibbonBar.GetCategory(1));
其中AFX_WM_ON_CHANGE_RIBBON_CATEGORY定义在外部依赖项->ribbonbar.h中。若使用了BCGCPPro则要使用BCGM_ON_CHANGE_RIBBON_CATEGORY定义消息,定义在外部依赖项->bcgpribbonbar.h中
Ribbon的几个可以被主窗口捕获的自定义消息
//这个消息用于通知主窗口重新调整控件的位置 UINT AFX_WM_POSTRECALCLAYOUT = ::RegisterWindowMessage(_T("AFX_WM_POSTRECALCLAYOUT"));
//这个消息用于通知主窗口Ribbon的Category面板发生了更改 UINT AFX_WM_ON_CHANGE_RIBBON_CATEGORY = ::RegisterWindowMessage(_T("AFX_WM_ON_CHANGE_RIBBON_CATEGORY"));
//这个消息用于通知主窗口调用Ribbon的自定义对话框 UINT AFX_WM_ON_RIBBON_CUSTOMIZE = ::RegisterWindowMessage(_T("AFX_WM_ON_RIBBON_CUSTOMIZE"));
//这个消息(应该是)用于通知主窗口对Ribbon的某个项目更改为高亮状态 UINT AFX_WM_ON_HIGHLIGHT_RIBBON_LIST_ITEM = ::RegisterWindowMessage(_T("AFX_WM_ON_HIGHLIGHT_RIBBON_LIST_ITEM"));
//这个消息(应该是)用于通知主窗口显示Ribbon的某项目的弹出菜单 UINT AFX_WM_ON_BEFORE_SHOW_RIBBON_ITEM_MENU = ::RegisterWindowMessage(_T("AFX_WM_ON_BEFORE_SHOW_RIBBON_ITEM_MENU"));
如果我们需要在主窗口中捕获这几个消息,可以按照如下步骤:
1.afx_msg LRESULT OnRibbonChanged(WPARAM wParam, LPARAM lParam);
2.ON_REGISTERED_MESSAGE(AFX_WM_ON_CHANGE_RIBBON_CATEGORY, &CMainFrame::OnRibbonChanged) //这里需要注意的是,因为他们都是注册给系统的消息,所以使用的宏不是普通的ON_MESSAGE。
3.LRESULT CMainFrame::OnRibbonChanged(WPARAM wParam, LPARAM lParam) { int i = 0; return 0; }

加载中…