我正在尝试更改基于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的评论添加更多的自定义颜色示例代码
答案 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,但无法编译。谢谢您的帮助。