使用Windows Ribbon框架自定义颜色

时间:2019-07-16 05:42:21

标签: c++

我正在尝试更改基于Windows Ribbon框架的应用程序的功能区颜色。我不是C ++开发人员,所以我充其量不会对C有所了解。但是,我确实掌握了大多数功能区XML标记。

除了自定义功能区xml标记之外,我拥有的应用程序代码与根据以下https://go.microsoft.com/fwlink/p/?linkid=137046或以下https://docs.microsoft.com/en-us/windows/win32/windowsribbon/windowsribbon-stepbystep

开发的Microsoft开发教程所产生的内容相同

大多数开发人员指南的示例代码都可以使用链接教程中的内容。关于页面上有关自定义颜色的代码注释,请参见:https://docs.microsoft.com/en-us/windows/win32/windowsribbon/ribbon-color,其中提到了功能区初始化期间使用的代码示例。我复制了示例代码

contentHeight = 7531
visibleAreaHeight = 1408

进入

CComPtr<IPropertyStore> spPropertyStore;
if (SUCCEEDED(_spFramework->QueryInterface(&spPropertyStore)))
{
  ...
}

Ribbon.cpp文件的功能。

这会产生很多以 “标识符“ _spFramework”未定义” 由于我不熟悉C ++或WIN32开发,我什至不知道从哪里开始修复此问题。

编辑:根据Mori的评论添加更多的自定义颜色示例代码

2 个答案:

答案 0 :(得分:0)

您可能想在SUCCEEDED()函数中添加更多代码,因为这是问题所在。

从文档中复制:

// _spFramework is a pointer to the IUIFramework interface that is assigned 
// when the Ribbon is initialized.
if (SUCCEEDED(_spFramework->QueryInterface(&spPropertyStore)))
{ 
    //some code
}

_spFramework在此示例中是一个变量(或更具体地说,是指向IUIFramework接口的指针),显然,它在您的代码中以其他方式命名。

所以问题是:您正在尝试使用从未声明过的变量,在C ++中是非法的(更不用说您要访问现有框架,而不仅仅是访问任何框架)。

要解决此问题,您需要在代码中搜索相应变量的声明(它的外观可能类似于IUIFramework * correctname),并使用相同的名称。

答案 1 :(得分:0)

Mori的答案部分解决了该问题,本教程声明“ IUIFramework * g_pFramework = NULL;”。在Ribbon.cpp文件中。

if (SUCCEEDED(_spFramework->QueryInterface(&spPropertyStore)))
{ 
  ...
}

应替换为

if (SUCCEEDED(g_pFramework->QueryInterface(&spPropertyStore)))
{ 
  ...
}

还会引发另一个错误,在编译之前必须包含propvarutil.h。

我知道&符号指向C中内存位置的约定,但是我以前从未接触过C ++中的下划线约定。我最初尝试将_spFramework替换为_g_pFramework,但无法编译。谢谢您的帮助。