如何使用Office Ribbon UI以编程方式禁用按钮或从下拉列表中添加/删除项目 我编写了一个简单的C++ COM Office插件,加载了一个带XML定义并显示了一个简单的带标签。它具有一些按钮和下拉列表(组合框/下拉列表)。我可以处理按钮点击事件和组合选择更改事件,就像一个符咒

如何使用Office Ribbon UI以编程方式禁用按钮或从下拉列表中添加/删除项目 我编写了一个简单的C++ COM Office插件,加载了一个带XML定义并显示了一个简单的带标签。它具有一些按钮和下拉列表(组合框/下拉列表)。我可以处理按钮点击事件和组合选择更改事件,就像一个符咒,c++,com,vsto,ms-office,ribbon,C++,Com,Vsto,Ms Office,Ribbon,现在,我想根据活动文档中的更改更新功能区UI,以便禁用一些按钮,并从combobox中添加/删除一些项目 我上下搜寻,找不到控制这一切的方法。我是否遗漏了一些非常明显的东西?如何从代码中的任何位置更改按钮启用状态?我看到的使用Windows功能区控件的方式:必须在设计时在XML标记中指定额外的按钮。在运行时,您可以调用SetModes()来指定在功能区中显示哪些小部件集 像这样: <Application.Views> <Ribbon> <R

现在,我想根据活动文档中的更改更新功能区UI,以便禁用一些按钮,并从combobox中添加/删除一些项目


我上下搜寻,找不到控制这一切的方法。我是否遗漏了一些非常明显的东西?如何从代码中的任何位置更改按钮启用状态?

我看到的使用Windows功能区控件的方式:必须在设计时在XML标记中指定额外的按钮。在运行时,您可以调用
SetModes()
来指定在功能区中显示哪些小部件集

像这样:

  <Application.Views>
    <Ribbon>
      <Ribbon.Tabs>
        <Tab CommandName="cmdTabMain" ApplicationModes="0,1">
          <Group CommandName="cmdGroupCommon" 
                 SizeDefinition="ThreeButtons" 
                 ApplicationModes="0,1">
            <Button CommandName="cmdButtonNew" />
            <Button CommandName="cmdButtonOpen" />
            <Button CommandName="cmdButtonSave" />
          </Group>
          <Group CommandName="cmdGroupSimple" 
                 SizeDefinition="TwoButtons" 
                 ApplicationModes="0">
            <Button CommandName="cmdButtonSwitchToAdvanced" />
            <Button CommandName="cmdButtonDropA" />
          </Group>
          <Group CommandName="cmdGroupAdvanced" 
                 SizeDefinition="FourButtons" 
                 ApplicationModes="1">
            <Button CommandName="cmdButtonSwitchToSimple" />
            <Button CommandName="cmdButtonDropA" />
            <Button CommandName="cmdButtonDropB" />
            <Button CommandName="cmdButtonDropC" />
          </Group>
        </Tab>
      </Ribbon.Tabs>
    </Ribbon>
  </Application.Views>

然后(无论如何,在C语言中)在单击处理程序中执行
\u ribbon.SetModes(1)
\u ribbon.SetModes(0)


谢谢!你真的很努力,但这不是我想要的。我在专门寻找C++解决方案。我的问题是,我不知道如何为功能区中的特定按钮获取一些
IButton
界面,并调用其
IButton->Enable(false)
方法。我希望现在能说得更清楚。