All Forums
 Категория Visio
 Форум Вопросы и ответы
 Add-in C++
Author Previous Topic Topic Next Topic  

VNIL

Russia
4 Posts

Posted - 03/23/2005 :  13:39:46
Пытаюсь использовать средства Microsoft Visio 2002 SDK для реализации COM Add-in в VC++.
Проект создаю с помощью add-in designer'а.

Не могу добраться до коллекции CommandBars. Код такой:

CVisioToolbars vsoCommandBars; // As Office.CommandBars (так на VB)
CVisioToolbar vsoCommandBar; // As Office.CommandBar (так на VB)

IDispatch FAR* ipCommandBars = NULL;
hrReturn = m_vsoApp.CommandBars(&ipCommandBars);

LPVISIOTOOLBARS lpTBs;
//получить указатель на интерфейс Toolbars
if ( SUCCEEDED(ipCommandBars->QueryInterface(IID_IVToolbars, (void **) &lpTBs)))
{
vsoCommandBars = lpTBs;
}
------------------------------------------------------------
Здесь используется метод класса-обертки CVisioApplication (ф. Visiwrap)
Метод объявлен так:

VW_INLINE HRESULT CVisioApplication::CommandBars(IDispatch FAR *FAR *lpRet)
{
HRESULT hr= VW_INTERFACE_NOT_SET;
CHECK_IP(GetIP(), CVisioApplication, CommandBars);
if (NULL!=GetIP())
hr= GetIP()->get_CommandBars(lpRet);
CHECK_HRESULT(hr, CVisioApplication, CommandBars);
return hr;
}
------------------------------------------------------------
lpTBs не получается.
А как нужно? Может кто проходил?

immortal

Russia
391 Posts

Posted - 03/31/2005 :  14:42:06  Visit immortal's Homepage
quote:
Originally posted by VNIL

Не могу добраться до коллекции CommandBars. Код такой:

CVisioToolbars vsoCommandBars; // As Office.CommandBars (так на VB)
CVisioToolbar vsoCommandBar; // As Office.CommandBar (так на VB)
------------------------------------------------------------
lpTBs не получается.
А как нужно? Может кто проходил?


на VB кнопка меню: As Office.CommandBarButton
причем для меню и для панели инструментов одинаково
в чем конкретно загвоздка, в примере (конструкторе) есть ссылки на меню и кнопки панели, единственное что я не смог сделать, это создать своё меню, поэтому кнопки сделал в Tools
опишите что вы хотите сделать, добавить кнопку в меню, или добавить меню?

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

VNIL

Russia
4 Posts

Posted - 04/06/2005 :  18:11:07
Пришлось отказаться от оберток, предлагаемых SDK Visio и построить код на основе ATL шаблона IDispEventSimpleImpl.
Сначала добавляем оператор #Import ...\OFFICE11\MSO.DLL для импорта
библиотека типов MS Office.
Затем получаем указатель интерфейса IDispatch FAR* ipCommandBars = NULL;
Создаем свой ToolBar с кнопкой.
Для обработки событий от кнопки используем шаблон IDispEventSimpleImpl.


// CAI_test::OnConnection
//
HRESULT CAI_test::OnConnection(
IN IDispatch* ipApplication,
IN ext_ConnectMode /*Mode*/,
IN IDispatch* /*ipAddinInst*/,
IN OUT SAFEARRAY** /*Custom*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// Get a reference to the Visio application.

LPVISIOAPPLICATION lpApp;
if ((NULL != ipApplication)
&& SUCCEEDED(ipApplication->QueryInterface(
IID_IVApplication, (void **) &lpApp)))
{
m_vsoApp = lpApp;
lpApp->Release();
}

CComPtr < Office::CommandBar> spCmdBar;

IDispatch FAR* ipCommandBars = NULL;

HRESULT hr = m_vsoApp.CommandBars(&ipCommandBars);
CComQIPtr < Office::_CommandBars> spCmdBars(ipCommandBars);

ATLASSERT(spCmdBars);

// Добавляем new toolband to Visio (c 2-мя кнопками)
CComVariant vName("Наш_Тулл_Бар");
CComPtr <Office::CommandBar> spNewCmdBar;

// .... Добавляем кнопки ...
//----------------------------------------------------------------
// Добавляем связь, чтобы получать события от кнопки
// (здесь CComPtr<Office::_CommandBarButton> m_spButton; )

hr = CommandButton1Events::DispEventAdvise((IDispatch*)m_spButton);
if(FAILED(hr))
return hr;

//----------------------------------------------------------------
MessageBox(GetActiveWindow(),
_T("OnConnection"),
_T("AI_test add-in"),
MB_OK);
return S_OK;
}
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/06/2005 :  20:40:53
Кажется, Вы у нас будете главным специалистом по C++
Go to Top of Page

BatMan

22 Posts

Posted - 04/15/2005 :  13:14:38
quote:
Originally posted by Tumanov

Кажется, Вы у нас будете главным специалистом по C++


госпадя
век живи век учись
главное чтобы не сбежал!!! :)
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)