关闭

响应MFC Feature Pack中 CMFCRibbonCategory 切换消息

326人阅读 评论(0) 收藏 举报

在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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:231472次
    • 积分:3851
    • 等级:
    • 排名:第8584名
    • 原创:98篇
    • 转载:359篇
    • 译文:0篇
    • 评论:13条
    最新评论