Помощь по COM требуется... Ж8(
|
От: |
Dizel
|
|
| Дата: | 05.07.04 11:18 |
|
Оценка: |
|
Есть класс:
class COfficeBtnHandler:
public IDispEventImpl<
/*nID*/ 1, COfficeBtnHandler,
&__uuidof(Office::_CommandBarButtonEvents),
&__uuidof(Office::__Office),
/*wMajor*/ OFFICELIB_MAJOR_VERSION,
/*wMinor*/ OFFICELIB_MINOR_VERSION>
{
public:
COfficeBtnHandler(void) {}
virtual ~COfficeBtnHandler(void) {}
// Event Handler
void __stdcall OnClick (
/*[in]*/ struct Office::_CommandBarButton * Ctrl,
/*[in,out]*/ VARIANT_BOOL * CancelDefault );
BEGIN_SINK_MAP(COfficeBtnHandler)
SINK_ENTRY_EX(/*nID =*/ 1, __uuidof(Office::_CommandBarButtonEvents), /*dispid =*/ 1, OnClick)
END_SINK_MAP()
};
void __stdcall COfficeBtnHandler::OnClick(
/*[in]*/ struct Office::_CommandBarButton * Ctrl,
/*[in,out]*/ VARIANT_BOOL * CancelDefault )
{MessageBox(NULL, "Привет из обработчика!!!", "Привет!", 0);}
Создаю кнопку и пытаюсь на нее повесить событие из класса COfficeBtnHandler таким методом:
COfficeBtnHandler* m_Handler;
m_Handler=new COfficeBtnHandler;
//CTestBtnHandler m_Handler;
pApp = pApplication;
myExp=pApp->ActiveExplorer();
CommandBarPtr pCommandBar = myExp->CommandBars->GetItem(_T("my1"));
CommandBarControlPtr m_pButton = NULL;
//MessageBox(NULL,"Connected","Connected",MB_OK);
// Если кнопка уже создана, получаем указатель на нее, иначе создаем новую
m_pButton = pCommandBar->FindControl(msoControlButton,vtMissing,_T("{0BC9C674-86F5-40f8-BC67-526D0AA0B935}"),vtMissing,msoFalse);
if (m_pButton==NULL)
{m_pButton = pCommandBar->Controls->Add(msoControlButton,vtMissing,vtMissing,1,vtMissing);
// Устанавливаем атрибуты
m_pButton->Caption = _T("CaptionText");
m_pButton->TooltipText = _T("TooltipText");
m_pButton->Tag = _T("{0BC9C674-86F5-40f8-BC67-526D0AA0B935}");
MessageBox(NULL,"Button Created","Button Created",MB_OK);
}
m_Handler->AddRef();
HRESULT hr=NULL;
hr=m_Handler->DispEventAdvise(m_pButton,&(m_pButton.GetIID()));
А в ответ — тишина... Кнопка создается и можно хоть обкликаться — молчание...
ХЕЛЬП!!! Или ткните носом в пример если можно.
Пока на собственное сообщение не было ответов, его можно удалить.