使用 Windows 功能区框架自定义颜色

Customizing Color with Windows Ribbon Framework

本文关键字:自定义 颜色 框架 功能区 Windows 使用      更新时间:2023-10-16

我正在尝试更改基于 Windows 功能区框架的应用程序的功能区颜色。我不是一个C++开发人员,我认为我对 C 的了解充其量是不可靠的。但是,我确实掌握了大部分功能区 XML 标记。

除了自定义功能区 xml 标记之外,我拥有的应用程序代码与以下Microsoft开发教程生成的内容匹配:https://go.microsoft.com/fwlink/p/?linkid=137046,或此处:https://learn.microsoft.com/en-us/windows/win32/windowsribbon/windowsribbon-stepbystep

开发人员指南的大多数示例代码都与链接教程中生成的内容一起使用。此处有关自定义颜色的页面上的代码注释:https://learn.microsoft.com/en-us/windows/win32/windowsribbon/ribbon-color 提到了功能区初始化期间使用的代码示例。我复制了示例代码

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

进入

HRESULT InitRibbon(HWND hWindowFrame)
{
...
---customize color---
return S_OK;
}

功能区.cpp文件的功能。

这会产生许多错误,从 "标识符"_spFramework"未定义" 由于我不熟悉C++或 WIN32 开发,我什至不知道从哪里开始解决这个问题。

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

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

从文档复制:

// _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)并使用相同的名称。

Mori的回答部分解决了这个问题,教程在功能区.cpp文件中声明"IUIFramework* g_pFramework = NULL;"。

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

应替换为

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

还抛出了另一个错误,propvarutil.h 需要包含在编译之前。

我知道 C 中指向内存位置的 & 符号约定,但我以前没有在C++中接触过这种下划线约定。我最初尝试用_g_pFramework替换_spFramework,但它无法编译。谢谢你的帮助。