加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MFC Ribbon Category 实现Tab页切换消息响应

(2017-05-08 15:44:00)
标签:

mfc

vs2010/mfc

分类: 编程

1. 在MFC的类向导 中 MainFrm框架类 中添加一个自定义消息(英文版为Custum Message):AFX_WM_ON_CHANGE_RIBBON_CATEGORY,(勾选“已注册的消息”)

http://pic002.cnblogs.com/images/2012/123794/2012072611361454.jpgRibbon Category 实现Tab页切换消息响应" />

     MainFrame.cpp的Message Map中自动添加消息:

           ON_REGISTERED_MESSAGE(AFX_WM_ON_CHANGE_RIBBON_CATEGORY, OnRibbonCategoryChanged)

     然后,实现OnRibbonCategoryChanged方法:


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;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有