建立Office2007风格的MFC单文档应用程序

原创 2015年11月21日 17:58:21

       VS2008 SP1及之后的版本集成了BCGControlBar(MFC界面库)的部分功能,我们可以利用它建立具有Office2007风格的MFC应用程序:在MFC应用程序建立向导——应用程序类型——视觉样式和颜色,选择“Office 2007 (蓝色主题)”,也可以“启用视觉样式切换”进行换肤。

这里写图片描述

       但是,如果在MFC应用程序建立向导——用户界面功能——命令栏,选择“使用经典菜单”,则会禁用上一步选择的新外观功能,生成的应用程序将不具有Office 2007风格。

这里写图片描述

这里写图片描述
不具备Office 2007风格的单文档应用程序界面

       如何让使用经典菜单的单文档应用程序具有Office 2007风格,或者说如何给已有的项目添加Office 2007风格?
       需要进行三步设置:
       1. 在资源文件中的 .rc 文件处右键,点击“查看代码”,在文件的末尾处添加三行代码:

#if !defined(_AFXDLL)
#include "l.CHS\afxribbon.rc"   // MFC 功能区和控件条资源
#endif

这里写图片描述

这里写图片描述

       2. 将继承自CFrameWnd的CMainFrame类改为继承自CFrameWndEx,即将MainFrame头文件和源文件中的所有CFrameWnd替换为CFrameWndEx;
       3. 在CMainFrame类的OnCreate函数开头添加以下两行代码:

//设置视觉管理器使用的视觉样式
CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
//设置用于绘制所有用户界面元素的视觉管理器
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));

       运行程序,发现并没有Office 2007风格,而且状态栏也不见了:
       将CMainFrame类的成员变量m_wndStatusBar的类型由CStatusBar改为CMFCStatusBar,运行程序,状态栏变成了Office 2007风格。

这里写图片描述

       如何将菜单栏也变为Office 2007风格呢?
       在MainFrame.h中声明CMFCMenuBar类型的变量m_wndMenuBar,在CMainFrame类的OnCreate函数中添加以下代码:

if (!m_wndMenuBar.Create(this))
    {
        TRACE0("未能创建菜单栏\n");
        return -1;      // 未能创建
    }
    m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
    // 防止菜单栏在激活时获得焦点
    CMFCPopupMenu::SetForceMenuFocus(FALSE);
    //使菜单栏可停靠
    EnableDocking(CBRS_ALIGN_ANY);
    DockPane(&m_wndMenuBar);

这里写图片描述

       如何修改文档的标题呢?
       在CMainFrame类的PreCreateWindow函数中添加以下代码:

SetTitle("设置的标题");

这里写图片描述

       此时,文档的标题有“无标题-”字样,在PreCreateWindow函数中添加以下代码去除:

cs.style&=~FWS_ADDTOTITLE;

这里写图片描述
最终生成的Office2007风格的MFC单文档应用程序


       OnCreate函数的代码:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
        return -1;


    //设置视觉管理器使用的视觉样式
    CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
    //设置用于绘制所有用户界面元素的视觉管理器
    CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));


    //----------------------------创建菜单栏-------------------------//
    if (!m_wndMenuBar.Create(this))
    {
        TRACE0("未能创建菜单栏\n");
        return -1;      // 未能创建
    }
    m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
    // 防止菜单栏在激活时获得焦点
    CMFCPopupMenu::SetForceMenuFocus(FALSE);
    //使菜单栏可停靠
    EnableDocking(CBRS_ALIGN_ANY);
    DockPane(&m_wndMenuBar);


    //-----------------------------创建状态栏-----------------------//
    if (!m_wndStatusBar.Create(this))
    {
        TRACE0("未能创建状态栏\n");
        return -1;      // 未能创建
    }
    m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));


    return 0;
}


       PreCreateWindow函数的代码:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWndEx::PreCreateWindow(cs) )
        return FALSE;
    // TODO: 在此处通过修改
    //  CREATESTRUCT cs 来修改窗口类或样式

    //修改文档的标题
    SetTitle("设置的标题");

    //去除标题前的"无标题"
    cs.style&=~FWS_ADDTOTITLE;

    return TRUE;
}




       项目资源:http://download.csdn.net/detail/sdupzy/9289193


版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/sdupzy

相关文章推荐

Visual C++ 2008 SP1 MFC (OFFICE界面)使用入门

图形画板2008设计文档目录1.    图形后台框架   1.1.    基本图形类框架如下:    2.    界面框架    2.1.    快捷菜单   2.2.    主菜单    2.3. ...
  • okaimee
  • okaimee
  • 2010年03月28日 18:30
  • 7562

Visual C++ 2008 MFC OFFICE界面创建入门

Visual C++ 2008 MFC OFFICE界面创建入门 分类: VC 2012-12-26 21:59 149人阅读 评论(0) 收藏 举报 mfcMFCofficeRIBBON ...
  • worldy
  • worldy
  • 2013年10月26日 08:47
  • 1929

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

MFC操作office通用分析方法

MFC操作office通用分析方法 序       Word和Excel都是我们在日常中常常用到的工具,当然大部分的操作都可以手动完成。但是有时候,有的重复性的统计操作是很繁琐的,比如如下的例子:...

VC Office2007界面对话框实现

我们知道VS2008SP1之后,MFC就多了一个功能包,可以快速的建立一个ribbon的界面,视觉样式可以在office 2007蓝、黑等颜色之间切换,这对于单文档/多文档做界面非常方便,而且也蛮好看...

MFC Lesson8 && 视觉F相关

逃跑按钮设置很巧妙,设置一个类并定义相关的鼠标移动的处理函数,然后在对应按钮上关联一个控件变量,这样这个按钮就能捕获相应消息了(这种实现模式比直接在按钮上定义相关类更方便灵活)  属性表单的设置,建立...

MFC 中的设计模式分析

最近在学习设计模式,突然想到MFC里面其实也包含有设计模式的原理,于是分析了一下,做一个笔记,网上也找了一些资料,在此一并感谢。 创建型模式 单例模式(Singleton Patt...
  • hero06
  • hero06
  • 2012年05月02日 22:36
  • 2082

halcon方法学习之blob分析

转自:http://qing.blog.sina.com.cn/2316220871/8a0eb9c733002oo4.html
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:建立Office2007风格的MFC单文档应用程序
举报原因:
原因补充:

(最多只允许输入30个字)