Сбой при использовании CRibbonUI.InvalidateControl или CRibbonUI.Invalidate в office2007, но это было хорошо в office2013

введите описание изображения здесь

Я пытаюсь разработать плагин для офиса Windows int ppt. Там есть кнопка входа в систему. Его начальное состояние не зарегистрировано. Когда я нажимаю на него, его статус изменяется на логин, мне нужно изменить текст над ним, я запрашиваю функцию обновления — RibbonUI InvalidateControl или Invalidate, но когда я вызываю эти функции, в щелчке Событие случилось с катастрофой. Но это хорошо в офисе2013. Зачем?

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

Спасибо!

1

Решение

Обратите внимание, что ссылка на ribbon интерфейс объекта передается как параметр для каждого связанного обратного вызова. Следовательно, кеширование ссылки на интерфейс, полученный во время вызова UILoad может не быть хорошей идеей, так как базовый объект может быть воссоздан из-за более поздней настройки или оптимизации, и указанный объект больше не действителен. Поэтому предпочитаю использовать ribbon интерфейс передается как параметр функции.

0

Другие решения

Других решений пока нет …