找出使用Office 2007风格的MFC功能包时正在使用的颜色

时间:2020-03-05 18:39:10  来源:igfitidea点击:

我正在更新一些旧版C ++代码,以使用Microsoft为Visual Studio 2008发布的" MFC功能包"。我们使用新类从CFrameWndEx派生我们的应用程序,并应用Office 2007样式来提供应用外观更现代。这为我们提供了渐变填充的窗口标题,状态栏等,以及功能区工具栏的使用。

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

我在文档和网络上进行了搜寻,但是还没有找到任何东西。有人知道如何找到此信息吗?

[编辑]

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

以下msdn页向我们显示可用的样式类型,尤其是Office2007的外观:
链接到msdn

解决方案

回答

我们是否尝试过:2007 Office System文档:解决方案和加载项的UI样式指南

回答

我们是否看过MFC源代码,在以下代码中可以找到

C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ src \ mfc

回答

我猜我们可以使用自己喜欢的图像编辑器并从屏幕抓取中选择颜色。

回答

"我猜我们可以使用自己喜欢的图像编辑器并从屏幕抓取中选择颜色。"

从本质上讲,这就是我目前正在做的事情,并且定义了一个常数列表,从中可以提取颜色。虽然看起来不太优雅!

回答

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

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

看一下CMFCVisualManager的MSDN文档。

回答

@ GateKiller,OP尚未开发Office 2007加载项,因此UI指南并没有真正的帮助。它是使用Visual C ++ 2008功能包的MFC应用程序,它使MFC应用程序具有Office 2007的外观。

回答

Looks like CMFCVisualManager offers several methods for getting color information, e.g.
  
  CMFCVisualManager::GetSmartDockingBaseGuideColors()
  CMFCVisualManager::GetToolbarHighlightColor()
  
  Take a look at the MSDN docs for CMFCVisualManager.

很好的建议,但不幸的是,当我当前以样式CMFCVisualManagerOffice2007 :: Office2007_LunaBlue运行我的应用程序时,它们只是返回各种灰度

烦人的是,msdn帮助正在"正在建设中",因此甚至都没有告诉我们他们应该做什么!

回答

Good suggestion, but unfortunately they just return various shades of grey, when currently I'm running my application with the style CMFCVisualManagerOffice2007::Office2007_LunaBlue

CMFCVisualManagerOffice2007 :: GetTabFrameColors clrFace输出参数是灰色的吗?

也许它们都是每个主题的单一基本色调之上的面具?假设我们可以使用CMFCVisualManagerOffice2007 :: GetStyle()确定哪种颜色方案有效,也许我们可​​以弄清楚该色调是什么,然后使用GetxxxColor()方法进行一些遮罩。

回答

" afxGlobalData"包含有关MFC Feature Pack使用的当前颜色,画笔和字体的一些有用信息。特别是在绘制自己的控制栏背景时,我使用" afxGlobalData.m_clrBarFace"。

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