响应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
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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
相关文章推荐
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
- js 字符串中某字符被全部替换
- jQuery 树形结构
- 【翻译】如何在Ext JS 6中使用Fashion美化应用程序
- 使用transform和transition制作CSS3动画
- JS获取本周周一 周日日期、本季度、本月、上月的开端日期、停止日期
- 【翻译】如何在Ext JS 6中使用Fashion美化应用程序
- 【翻译】如何在Ext JS 6中使用Fashion美化应用程序
- 【翻译】如何在Ext JS 6中使用Fashion美化应用程序
- JS处理图片宽高
- JSP公用分页模块+数字分页
- 不一样的味道--Html和Xml解析、格式、遍历
- javascript实现rgb颜色转换成16进制格式
- 转JavaScript的语法解析与抽象语法树
- 再谈JavaScript线程
- js 异常处理
- ListView自定义样式
- javascript实现判断鼠标的状态
- 记录一种Json转Model的思路
- javascript检查浏览器是否已经启用XX功能