建立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 MFC OFFICE界面创建入门

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

VS2013/MFC编程入门之一(利用MFC向导生成单文档应用程序框架)

关于VS2013和MSDN如何安装,网上有很多教程,再次就不在赘述,相信大家都已经安装好了。本次MFC编程全程使用简体中文专业版VS2013 进行操作。这一讲给大家一个简单的例子,演示如何生成单文档应...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年11月22日 22:11
  • 4539

更改 MFC 创建的窗口样式

MFC 在其 WinMain 函数的版本中为您注册了几个标准窗口类。由于您通常不编辑 MFC 的 WinMain,该函数不给您更改 MFC 默认窗口样式的机会。本文解释如何在现有应用程序中更改这种已预...
  • ziren235
  • ziren235
  • 2006年11月03日 22:37
  • 3668

MFC MDI和SDI非客户区框架界面美化之----界面全面美化

VS2008以上的开发平台,微软提供了“视觉管理器和样式”这么一个概念,我们可以通过继承视觉管理器提供的样式进行美化界面,包括MDI框架等。也可以实现构造自己的皮肤界面库,从而避免无休止的重绘、刷新界...
  • wzy198852
  • wzy198852
  • 2014年02月12日 10:49
  • 9111

VS2008中MFC的对话框界面风格问题

以前在XP写的程序,现在系统换成了WIN7,现在对话框在编辑和预览的时候显示都如图一所示,可实际编译生成之后的显示却如图二所示,是什么问题?如何设置两者的显示风格使其保持一致? ...
  • Beyond_cn
  • Beyond_cn
  • 2014年02月13日 10:03
  • 5163

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

VS2008 SP1及之后的版本集成了BCGControlBar(MFC界面库)的部分功能,我们可以利用它建立具有Office2007风格的MFC应用程序:在MFC应用程序建立向导——应用程序类型——...
  • sdupzy
  • sdupzy
  • 2015年11月21日 17:58
  • 1033

MFC操作office通用分析方法

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

C++ MFC / VS2013 之一 单文档应用程序

一. 解决方案和工程的区别      每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在VS2013中,工程都是在解决方案管理之下的。一个解决方案可以管...
  • wgf5845201314
  • wgf5845201314
  • 2017年09月30日 10:44
  • 495

MFC单文档应用程序基础训练——文本输出、绘图等

MFC单文档 基础训练——文本输出、绘图等   平台为:VS2010 1.   一个简单的单文档应用程序 文件->新建项目->MFC应用程序 ,出现窗口按“下一步”,出现下面窗口选择单文...
  • yfhy2014
  • yfhy2014
  • 2015年01月14日 16:57
  • 3441

MFC单文档之制作MFC规则DLL

MFC规则DLL(动态链接库)
  • menshu1892
  • menshu1892
  • 2017年04月16日 17:04
  • 440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:建立Office2007风格的MFC单文档应用程序
举报原因:
原因补充:

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