Outlook Banter

Outlook Banter (http://www.outlookbanter.com/)
-   Add-ins for Outlook (http://www.outlookbanter.com/add-ins-outlook/)
-   -   [Amended] Cannot trigger OnChange event from inspector's command bar combo box (http://www.outlookbanter.com/add-ins-outlook/29493-amended-cannot-trigger-onchange-event.html)

tonyl October 10th 06 10:57 AM

[Amended] Cannot trigger OnChange event from inspector's command bar combo box
 

When I got the new inspector event, I will create a combo box and toolbar
to the commandbars on the inspector window. And try to add the OnChange
event using the call DispEventAdvise or AtlAdvise.
Both calls return S_OK. however, no one trigger the call when I change the
combo box selection.

Anyone knows how to solve it?

Thanx alot.
Tony

connect.h
========
class ATL_NO_VTABLE CConnect :
public CComObjectRootExCComSingleThreadModel,
public CComCoClassCConnect, &CLSID_Connect,
.....
public IDispEventSimpleImpl3,CConnect,&__uuidof(Outlook: :InspectorsEvents),
public IDispEventSimpleImpl4,CConnect,&__uuidof(Office:: _CommandBarComboBoxEvents)
{
public:
....
typedef IDispEventSimpleImpl/*nID =*/ 3,CConnect, &__uuidof(Outlook::InspectorsEvents)

NewInspectorEvents;
typedef IDispEventSimpleImpl/*nID =*/ 4,CConnect, &__uuidof(Office::_CommandBarComboBoxEvents)

CommandBarComboBoxEvents;

BEGIN_SINK_MAP(CConnect)
....
SINK_ENTRY_INFO(3, __uuidof(Outlook::InspectorsEvents),/*dispid*/ 0xf001,
OnNewInspector, &OnNewInspectorInfo) // new inspector
SINK_ENTRY_INFO(4, __uuidof(Office::_CommandBarComboBoxEvents),/*dispid*/
0x1, OnChangeCommandBarComboBox, &OnComboBoxChangeInfo) // new inspector
END_SINK_MAP()

....

void __stdcall OnNewInspector(IDispatch *lpInspector);
void __stdcall OnChangeCommandBarComboBox(IDispatch *lpCtrl);
};

connect.cpp
===========

.....
_ATL_FUNC_INFO OnNewInspectorInfo = {CC_STDCALL,VT_EMPTY,1, {VT_DISPATCH}};
_ATL_FUNC_INFO OnComboBoxChangeInfo = {CC_STDCALL,VT_EMPTY,1, {VT_DISPATCH}};
void __stdcall CConnect::OnNewInspector(IDispatch *lpInspector)
{
CComQIPtrOutlook::_Inspector spInspector(lpInspector);
CComPtrOffice::_CommandBars spCmdBars;
spInspector-get_CommandBars(&spCmdBars);
VARIANT vTitle, vPos, vMenuBar, vTemp;
vTitle.bstrVal = CString("callist").AllocSysString();
vTitle.vt = VT_BSTR;
vPos.vt = VT_UI4;
vPos.ulVal = 1 ;

vTemp.boolVal = TRUE;
vTemp.vt = VT_BOOL;

vMenuBar.vt = VT_UI4;
vMenuBar.ulVal = 0;
CComPtrOffice::CommandBar spCmdBar;
CComPtrOffice::CommandBarControls spCmdBarCtrls;
CComPtrOffice::_CommandBarComboBox spCmdBarCtrl;
hr = spCmdBars-Add(vTitle, vtMissing, vtMissing, vTemp, &spCmdBar);
if (hr != S_OK) {
log.format(CLogger::LOG_ERROR, "OnNewInspector: Add CmdBar Failure");
return;
}

hr = spCmdBar-get_Controls(&spCmdBarCtrls);
if (hr != S_OK) {
log.format(CLogger::LOG_ERROR, "OnNewInspector: Get CmdBar Controls
Failure");
return;
}

VARIANT vType, vInt1, vBool;
vType.vt = VT_UI4;
vType.ulVal = 4; //MsoControlType::msoControlComboBox
vInt1.vt = VT_UI4;
vInt1.ulVal = 1;
hr = spCmdBarCtrls-Add(vType, vtMissing, vtMissing, vInt1, vInt1, (Office::CommandBarControl

**)&spCmdBarCtrl);
if (hr != S_OK) {
log.format(CLogger::LOG_ERROR, "OnNewInspector: Add CmdBar Control
Failure");
return;
}
hr = AtlAdvise((IUnknown *)spCmdBarCtrl, (IUnknown*)(CommandBarComboBoxEvents

*)this, __uuidof(Office::_CommandBarComboBoxEvents), &(((CommandBarComboBoxEvents

*)this)-m_dwEventCookie));
m_cbxEvent.m_dwChangeEventCookie = ((CommandBarComboBoxEvents *)this)-m_dwEventCookie;
if(FAILED(hr)) {
log.format(CLogger::LOG_APP_DEBUG, "CCmdbarCbxEvent::Notify() ERROR:
CCmdbarCbxEvent::DispEventAdvise
failed: 0x%x", hr);
//return;
}
}
void __stdcall CConnect::OnChangeCommandBarComboBox(IDispatch *lpCtrl)
{
CComQIPtrOffice::_CommandBarComboBox spCbx(lpCtrl);
MessageBox(0, "combo box selected!!!", "info", 0);
}

Posted by JetBrains Omea Reader 936.5




tonyl October 10th 06 11:10 AM

[Amended] Cannot trigger OnChange event from inspector's command bar combo box
 
I found a more wild thing happened. If I open 2 new inspectors without close
the first one, the combo box in the 2nd inspector will have the event. Anyone
know what's wrong with my code?

Regards,
Tony

When I got the new inspector event, I will create a combo box and
toolbar to the commandbars on the inspector window. And try to add the
OnChange event using the call DispEventAdvise or AtlAdvise. Both calls
return S_OK. however, no one trigger the call when I change the combo
box selection.

Anyone knows how to solve it?

Thanx alot.
Tony
connect.h
========
class ATL_NO_VTABLE CConnect :
public CComObjectRootExCComSingleThreadModel,
public CComCoClassCConnect, &CLSID_Connect,
....
public
IDispEventSimpleImpl3,CConnect,&__uuidof(Outlook: :InspectorsEvents),
public
IDispEventSimpleImpl4,CConnect,&__uuidof(Office:: _CommandBarComboBoxE
vents)
{
public:
...
typedef IDispEventSimpleImpl/*nID =*/ 3,CConnect,
&__uuidof(Outlook::InspectorsEvents)
NewInspectorEvents;
typedef IDispEventSimpleImpl/*nID =*/ 4,CConnect,
&__uuidof(Office::_CommandBarComboBoxEvents)
CommandBarComboBoxEvents;

BEGIN_SINK_MAP(CConnect)
...
SINK_ENTRY_INFO(3, __uuidof(Outlook::InspectorsEvents),/*dispid*/
0xf001,
OnNewInspector, &OnNewInspectorInfo) // new inspector
SINK_ENTRY_INFO(4,
__uuidof(Office::_CommandBarComboBoxEvents),/*dispid*/
0x1, OnChangeCommandBarComboBox, &OnComboBoxChangeInfo) // new
inspector
END_SINK_MAP()
...

void __stdcall OnNewInspector(IDispatch *lpInspector);
void __stdcall OnChangeCommandBarComboBox(IDispatch *lpCtrl);
};
connect.cpp
===========
....
_ATL_FUNC_INFO OnNewInspectorInfo = {CC_STDCALL,VT_EMPTY,1,
{VT_DISPATCH}};
_ATL_FUNC_INFO OnComboBoxChangeInfo = {CC_STDCALL,VT_EMPTY,1,
{VT_DISPATCH}};
void __stdcall CConnect::OnNewInspector(IDispatch *lpInspector)
{
CComQIPtrOutlook::_Inspector spInspector(lpInspector);
CComPtrOffice::_CommandBars spCmdBars;
spInspector-get_CommandBars(&spCmdBars);
VARIANT vTitle, vPos, vMenuBar, vTemp;
vTitle.bstrVal = CString("callist").AllocSysString();
vTitle.vt = VT_BSTR;
vPos.vt = VT_UI4;
vPos.ulVal = 1 ;
vTemp.boolVal = TRUE;
vTemp.vt = VT_BOOL;
vMenuBar.vt = VT_UI4;
vMenuBar.ulVal = 0;
CComPtrOffice::CommandBar spCmdBar;
CComPtrOffice::CommandBarControls spCmdBarCtrls;
CComPtrOffice::_CommandBarComboBox spCmdBarCtrl;
hr = spCmdBars-Add(vTitle, vtMissing, vtMissing, vTemp,
&spCmdBar);
if (hr != S_OK) {
log.format(CLogger::LOG_ERROR, "OnNewInspector: Add CmdBar
Failure");
return;
}
hr = spCmdBar-get_Controls(&spCmdBarCtrls);
if (hr != S_OK) {
log.format(CLogger::LOG_ERROR, "OnNewInspector: Get CmdBar
Controls
Failure");
return;
}
VARIANT vType, vInt1, vBool;
vType.vt = VT_UI4;
vType.ulVal = 4; //MsoControlType::msoControlComboBox
vInt1.vt = VT_UI4;
vInt1.ulVal = 1;
hr = spCmdBarCtrls-Add(vType, vtMissing, vtMissing, vInt1, vInt1,
(Office::CommandBarControl
**)&spCmdBarCtrl);
if (hr != S_OK) {
log.format(CLogger::LOG_ERROR, "OnNewInspector: Add CmdBar
Control
Failure");
return;
}
hr = AtlAdvise((IUnknown *)spCmdBarCtrl,
(IUnknown*)(CommandBarComboBoxEvents
*)this, __uuidof(Office::_CommandBarComboBoxEvents),
&(((CommandBarComboBoxEvents

*)this)-m_dwEventCookie));
m_cbxEvent.m_dwChangeEventCookie = ((CommandBarComboBoxEvents
*)this)-m_dwEventCookie;
if(FAILED(hr)) {
log.format(CLogger::LOG_APP_DEBUG, "CCmdbarCbxEvent::Notify()
ERROR:
CCmdbarCbxEvent::DispEventAdvise
failed: 0x%x", hr);
//return;
}
}
void __stdcall CConnect::OnChangeCommandBarComboBox(IDispatch *lpCtrl)
{
CComQIPtrOffice::_CommandBarComboBox spCbx(lpCtrl);
MessageBox(0, "combo box selected!!!", "info", 0);
}
Posted by JetBrains Omea Reader 936.5





All times are GMT +1. The time now is 05:06 AM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com