您的位置:首页 > Web前端

响应MFC Feature Pack中 CMFCRibbonCategory 切换消息

2015-07-10 13:20 489 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: