关闭

响应MFC Feature Pack中 CMFCRibbonCategory 切换消息

405人阅读 评论(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网站的观点或立场

PeekMessage完美解决MFC主界面无响应

一般主界面无响应的解决方案是,对于计算量过大的方法,另开工作者线程,如下:      MFC支持两种线程:用户界面线程和工作者线程。 (1)用户界面线程:通常用于处理用户输入,...
  • aa1991
  • aa1991
  • 2015-03-20 16:51
  • 2334

MFC中如何添加消息响应函数

目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构。这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要3个对象: 框架窗口类(C...
  • eddy_liu
  • eddy_liu
  • 2013-01-06 21:45
  • 26706

mfc 关于不响应键盘消息的处理

一:首先介绍键盘消息 系统消息:     ALT,F1,——F24等,是由系统内部处理的,程序本身就存在,比如F1是帮助键。     WM_SYSKEYDOWN     WM_SYSKEYUP  &#...
  • cheng_xu_yuanlilin
  • cheng_xu_yuanlilin
  • 2013-12-23 23:07
  • 2881

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

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

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

Visual C++ 2008 Feature Pack Release VS2008简体中文版 TR1(Technical Report 1)
  • delphiwcdj
  • delphiwcdj
  • 2011-02-18 13:36
  • 9144

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

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

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

在VS2008中使用#include ,会得到以下错误提示: fatal error C1083: Cannot open include file: 'regex': No such file...
  • Plutus_Lee
  • Plutus_Lee
  • 2013-02-06 10:42
  • 1026

VS 2010 visualization modeling feature pack

  • 2017-11-14 09:23
  • 1.13MB
  • 下载

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

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

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

 在VS2008中使用#include ,会得到以下错误提示: fatal error C1083: Cannot open include file: 'regex': No such fi...
  • wangjin2891
  • wangjin2891
  • 2014-01-10 13:23
  • 584
    个人资料
    • 访问:323945次
    • 积分:4827
    • 等级:
    • 排名:第6899名
    • 原创:106篇
    • 转载:384篇
    • 译文:0篇
    • 评论:20条
    最新评论