我正在尝试开发Windows Office插件int ppt。那里有一个登录按钮。其初始状态未登录。单击它时,其状态更改为登录,我需要更改其上方的文本,我查询要更新的功能是RibbonUI InvalidateControl或Invalidate,但是当我调用这些功能时,单击事件发生当机。但这在office2013中很好。为什么?

STDMETHOD(UILoad)(IDispatch* ribbon)
{
    m_ribbonUI = ribbon;
    //m_ribbonUI.InvalidateControl(_T("LoginButton"));
    return S_OK;
}
STDMETHODIMP CConnect::LoginButtonClicked( IDispatch* ribbon )
{
    CConnect::loginLable = CComBSTR(_T("Logged"));
    m_ribbonUI.InvalidateControl(_T("LoginButton"));
    return S_OK;
}

这是我的项目地址:
https://github.com/Barmaco/NativeAddIn

谢谢!

最佳答案

注意,对ribbon对象接口(interface)的引用作为参数传递给每个相关的回调调用。因此,缓存对调用UILoad期间获得的接口(interface)的引用可能不是一个好主意,因为由于后来的自定义或优化可能会重新创建基础对象,并且所引用的对象不再有效。因此,更喜欢使用作为函数参数传递的ribbon接口(interface)。

关于c++ - 在Office2007中使用CRibbonUI.InvalidateControl或CRibbonUI.Invalidate时崩溃,但在office2013中很好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49168907/

10-10 21:20