响应MFC Feature Pack中 CMFCRibbonCategory 切换消息

在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。

 

 

是否有更合适的方法,欢迎指正。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值