Author |
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
|
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 форэвер
...а вобще-то я белый и пушистый. |
|
|
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; } |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/06/2005 : 20:40:53
|
Кажется, Вы у нас будете главным специалистом по C++ |
|
|
BatMan
22 Posts |
Posted - 04/15/2005 : 13:14:38
|
quote: Originally posted by Tumanov
Кажется, Вы у нас будете главным специалистом по C++
госпадя век живи век учись главное чтобы не сбежал!!! :) |
|
|
|
Topic |
|
|
|