代码之家  ›  专栏  ›  技术社区  ›  John Sibly

了解在使用Office2007样式的MFC功能包时使用的颜色

  •  4
  • John Sibly  · 技术社区  · 17 年前

    我正在更新一些传统的C++代码,使用微软为VisualStudio 2008发布的“MFC功能包”。我们已经使用新类从cframewndex派生应用程序,并且正在应用Office2007样式,以使应用程序具有更现代的外观。这为我们提供了渐变填充窗口标题、状态栏等,以及功能区工具栏的使用。

    但是,我们的应用程序包含一些所有者绘制的控件,我想更新这些控件以匹配功能包使用的颜色方案。理想情况下,我想知道当前正在使用的灯光和阴影工具栏颜色。

    我在文档和网络上搜寻过,但还没有找到任何东西。有人知道如何找出这个信息吗?

    [编辑]

    特别是我们需要找出运行时使用的颜色。可以使用新的静态函数cmfcVisualManager::setDefaultManager在运行时更改应用程序的外观。

    下面的msdn页面向您展示了可用的样式,特别是Office2007外观: link to msdn

    9 回复  |  直到 17 年前
        1
  •  1
  •   Will Dean    17 年前

    你看过MFC源代码吗,你会在类似的

    C:\程序文件\Microsoft Visual Studio 9.0\VC\ATLMFC\SRC\MFC

        2
  •  1
  •   John Sibly    17 年前

    看起来cmfcVisualManager提供了几种获取颜色信息的方法,例如

    CMFCVisualManager::GetSmartDockingBaseGuideColors()。 CMFCVisualManager::GettoolBarHighlightColor()。

    查看用于CMFCVisualManager的msdn文档。

    很好的建议,但不幸的是,当我使用cmfcVisualManagerOffice2007::Office2007样式运行应用程序时,它们只返回各种灰色。

    令人恼火的是,msdn帮助“正在建设中”,所以甚至没有告诉你他们应该做什么!

        3
  •  1
  •   Rob    17 年前

    afxGlobalData 包含有关MFC功能包当前使用的颜色、画笔和字体的一些有用信息。尤其是我用 afxGlobalData.m_clrBarFace 在绘制自己的控制栏背景时。

    (请注意,我不在我的工作电脑前面,因此上面的语法不适用。)

        5
  •  0
  •   GateKiller    17 年前

    我想你可以使用你最喜欢的图像编辑器,从屏幕抓取中选择颜色。

        6
  •  0
  •   John Sibly    17 年前

    “我想你可以使用你最喜欢的图像编辑器,从屏幕抓取中选择颜色。”

    这就是我现在正在做的,我已经定义了一个常量列表,从中提取颜色。不过看起来不太优雅!

        7
  •  0
  •   Aidan Ryan    17 年前

    看起来cmfcVisualManager提供了几种获取颜色信息的方法,例如

    CMFCVisualManager::GetSmartDockingBaseGuideColors()
    CMFCVisualManager::GetToolbarHighlightColor()
    

    查看用于CMFCVisualManager的msdn文档。

        8
  •  0
  •   Aidan Ryan    17 年前

    @gatekiller,操作系统没有开发Office2007外接程序,所以用户界面指南没有真正的帮助。它是一个使用 Visual C++ 2008 Feature Pack 这使得MFC应用程序可以呈现Office2007的外观和感觉。

        9
  •  0
  •   Aidan Ryan    17 年前

    很好的建议,但不幸的是,当我使用cmfcVisualManagerOffice2007::Office2007样式运行应用程序时,它们只返回各种灰色。

    cmfcVisualManagerOffice2007::gettabFrameColors-clrface输出参数为灰色?

    也许它们都是每个主题的单一基础色调上的遮罩?假设您可以使用cmfcVisualManagerOffice2007::GetStyle()确定哪个颜色方案有效,也许您可以确定该色调是什么,然后使用getXXXColor()方法进行一些遮罩。

    推荐文章