响应MFC Feature Pack中 CMFCRibbonCategory 切换消息

转载 2015年07月10日 13:20:12

在MFC Feature Pack中,可以为CMFCRibbonBar添加多个CMFCRibbonCategory 作为button panel的容器。在切换这些category时,MFC没有提供对应的消息类型,可以派生一个新的CMFCRibbonBar子类,当设置当前category时,向Main Frame发送消息,将category的caption字符串作为消息参数。在Main Frame中,通过判断对应字符串是否相等,得到当前的category。

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// CMFCRibbonBarEx.h

#pragma once
#define WM_USER_SWITCHRIBBONCATEGORY WM_USER+200
class CMFCRibbonBarEx : public CMFCRibbonBar
{
    DECLARE_DYNAMIC(CMFCRibbonBarEx)
public:
   CMFCRibbonBarEx();
   virtual ~CMFCRibbonBarEx();
   //overwrite virtual function
   virtual BOOL SetActiveCategory(CMFCRibbonCategory* pCategory, BOOL bForceRestore  = FALSE );
protected:
    DECLARE_MESSAGE_MAP()
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// CMFCRibbonBarEx.cpp

#include "stdafx.h"
#include "CMFCRibbonBarEx.h"


IMPLEMENT_DYNAMIC(CMFCRibbonBarEx,CMFCRibbonBar)
BEGIN_MESSAGE_MAP(CMFCRibbonBarEx,CMFCRibbonBar)
END_MESSAGE_MAP()


CMFCRibbonBarEx::CMFCRibbonBarEx()
{}
CMFCRibbonBarEx::~CMFCRibbonBarEx()
{}

BOOL CMFCRibbonBarEx::SetActiveCategory(CMFCRibbonCategory* pCategory, BOOL bForceRestore )
{
    CMFCRibbonBar::SetActiveCategory(pCategory,bForceRestore);

    // when switching the current ribbon category, send message to the main frame

    LPCTSTR lpName = pCategory->GetName();
    CMainFrame* pMainFrm = (CMainFrame *)AfxGetMainWnd();
    pMainFrm->SendMessage(WM_USER_SWITCHRIBBONCATEGORY,NULL,(LPARAM)lpName);

    return TRUE;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// MainFrm.h

class CMainFrame

{

   CMFCRibbonBarEx     m_wndRibbonBar;

   afx_msg LRESULT OnSwitchRibbonCategory(WPARAM wparam,LPARAM lparam);

};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// MainFrm.cpp

ON_MESSAGE(WM_USER_SWITCHRIBBONCATEGORY,OnSwitchRibbonCategory)

 

LRESULT CMainFrame::OnSwitchRibbonCategory(WPARAM wparam,LPARAM lparam)
{
    CString strName;
    strName = (LPCTSTR)lparam;

    CString categoryName;

    if(  categoryName.LoadString(IDS_RIBBON_CAD) && ( categoryName == strName ) )
    {
        MessageBox(_T("CAD"));
    }else
    if( categoryName.LoadString(IDS_RIBBON_HOME ) && ( categoryName == strName ) )
    {
       MessageBox(_T("HOME"));
    }
    return 0;
}

 

在每次切换category的时候,都会调用虚函数SetActiveCategory


来源:http://blog.csdn.net/robinjwong/article/details/5328626

相关文章推荐

VS2008 MFC Feature pack下如何为MRU添加条目

最近迁移到VS2008下工作,有一个新项目也在这个下面开发。使用了VS2008 Feature Pack下带的MFC9.0的新界面。项目是MFC MDI Application,问题发现,使用老的方式...

千呼万唤始出来的 Visual C++ 2008 Feature Pack 介绍

缘起: 自Visual C++ 5.0 6.0 以来一直遭人诟病的是什么? 过于简单的界面控件! 作为一个以Visual C++ 作为开发工具的程序员,遇到最郁闷的事情是什么? 开发一个具有漂...
  • momosp
  • momosp
  • 2012年04月24日 09:55
  • 645

解决Visual C++ 2008 Feature Pack Release安装失败的方法 —— 在VS2008简体中文版上安装TR1

Visual C++ 2008 Feature Pack Release VS2008简体中文版 TR1(Technical Report 1)

VS Feature Pack学习之使用CMFCMenuBar自定义菜单栏

转自:http://blog.csdn.net/clever101/article/details/5795520 现在很多应用程序的界面基本是用配置文件来规划界面的,在这个时候就得学会自定...

VS2008 feature pack 菜单没法显示快捷键的解决方法

之前遇到过一个加速键表即使是填写了菜单ID与加速键对应关系,但由于Focus不在MainFrame上(有可能是其他窗口如ControlBar)而造成加速键不作用的问题,所以采用了KeyBoard Ho...

解决Visual C++ 2008 Feature Pack Release安装失败的方法 —— 在VS2008简体中文版上安装TR1

 在VS2008中使用#include ,会得到以下错误提示: fatal error C1083: Cannot open include file: 'regex': No such fi...

VS 2010 visualization modeling feature pack

  • 2017年11月14日 09:23
  • 1.13MB
  • 下载

Visual Studio 2010 Feature Pack 2

  • 2010年11月22日 23:02
  • 2.44MB
  • 下载

MFC动态创建控件及添加消息响应

转载地址:http://blog.csdn.net/luy3728000/article/details/8193918 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置...
  • shuaiby
  • shuaiby
  • 2013年01月24日 14:12
  • 29921
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:响应MFC Feature Pack中 CMFCRibbonCategory 切换消息
举报原因:
原因补充:

(最多只允许输入30个字)