145 lines
3.5 KiB
C++
145 lines
3.5 KiB
C++
// HMGraphViewEventSink.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "snapin.h"
|
|
#include "HMGraphViewEventSink.h"
|
|
#include "HMGraphView.h"
|
|
#include "SplitPaneResultsView.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHMGraphViewEventSink
|
|
|
|
IMPLEMENT_DYNCREATE(CHMGraphViewEventSink, CCmdTarget)
|
|
|
|
CHMGraphViewEventSink::CHMGraphViewEventSink()
|
|
{
|
|
EnableAutomation();
|
|
m_dwEventCookie = 0L;
|
|
m_pGraphView = NULL;
|
|
m_pView = NULL;
|
|
}
|
|
|
|
CHMGraphViewEventSink::~CHMGraphViewEventSink()
|
|
{
|
|
m_pGraphView = NULL;
|
|
m_pView = NULL;
|
|
}
|
|
|
|
|
|
void CHMGraphViewEventSink::OnFinalRelease()
|
|
{
|
|
// When the last reference for an automation object is released
|
|
// OnFinalRelease is called. The base class will automatically
|
|
// deletes the object. Add additional cleanup required for your
|
|
// object before calling the base class.
|
|
|
|
CCmdTarget::OnFinalRelease();
|
|
}
|
|
|
|
CSplitPaneResultsView* CHMGraphViewEventSink::GetResultsViewPtr()
|
|
{
|
|
TRACEX(_T("CHMGraphViewEventSink::GetResultsViewPtr\n"));
|
|
|
|
if( ! GfxCheckObjPtr(m_pView,CSplitPaneResultsView) )
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
return m_pView;
|
|
}
|
|
|
|
void CHMGraphViewEventSink::SetResultsViewPtr(CSplitPaneResultsView* pView)
|
|
{
|
|
TRACEX(_T("CHMGraphViewEventSink::SetObjectPtr\n"));
|
|
TRACEARGn(pView);
|
|
|
|
if( ! pView || ! GfxCheckObjPtr(pView,CSplitPaneResultsView) )
|
|
{
|
|
m_pView = NULL;
|
|
return;
|
|
}
|
|
|
|
m_pView = pView;
|
|
}
|
|
|
|
HRESULT CHMGraphViewEventSink::HookUpEventSink(LPUNKNOWN lpControlUnknown)
|
|
{
|
|
TRACEX(_T("CHMGraphViewEventSink::HookUpEventSink\n"));
|
|
TRACEARGn(lpControlUnknown);
|
|
|
|
HRESULT hr = S_OK;
|
|
IConnectionPointContainer* pCPC = 0;
|
|
hr = lpControlUnknown->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
|
|
if(pCPC)
|
|
{
|
|
IProvideClassInfo2* pPCI = 0;
|
|
lpControlUnknown->QueryInterface(IID_IProvideClassInfo2, (void**)&pPCI);
|
|
if(pPCI)
|
|
{
|
|
IID iidEventSet;
|
|
hr = pPCI->GetGUID(GUIDKIND_DEFAULT_SOURCE_DISP_IID,&iidEventSet);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
IConnectionPoint* pCP = 0;
|
|
hr = pCPC->FindConnectionPoint(iidEventSet, &pCP);
|
|
|
|
if(pCP)
|
|
{
|
|
pCP->Advise(GetIDispatch(TRUE),&m_dwEventCookie);
|
|
pCP->Release();
|
|
}
|
|
}
|
|
pPCI->Release();
|
|
}
|
|
pCPC->Release();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CHMGraphViewEventSink, CCmdTarget)
|
|
//{{AFX_MSG_MAP(CHMGraphViewEventSink)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BEGIN_DISPATCH_MAP(CHMGraphViewEventSink, CCmdTarget)
|
|
//{{AFX_DISPATCH_MAP(CHMGraphViewEventSink)
|
|
DISP_FUNCTION(CHMGraphViewEventSink, "OnChangeStyle", OnChangeStyle, VT_EMPTY, VTS_I4)
|
|
//}}AFX_DISPATCH_MAP
|
|
END_DISPATCH_MAP()
|
|
|
|
// Note: we add support for IID_IHMGraphViewEventSink to support typesafe binding
|
|
// from VBA. This IID must match the GUID that is attached to the
|
|
// dispinterface in the .ODL file.
|
|
|
|
// {C54EFB01-3555-11D3-BE19-0000F87A3912}
|
|
static const IID IID_IHMGraphViewEventSink =
|
|
{ 0xc54efb01, 0x3555, 0x11d3, { 0xbe, 0x19, 0x0, 0x0, 0xf8, 0x7a, 0x39, 0x12 } };
|
|
|
|
BEGIN_INTERFACE_MAP(CHMGraphViewEventSink, CCmdTarget)
|
|
INTERFACE_PART(CHMGraphViewEventSink, IID_IHMGraphViewEventSink, Dispatch)
|
|
END_INTERFACE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHMGraphViewEventSink message handlers
|
|
|
|
void CHMGraphViewEventSink::OnChangeStyle(long lNewStyle)
|
|
{
|
|
CSplitPaneResultsView* pView = GetResultsViewPtr();
|
|
if( ! pView )
|
|
{
|
|
return;
|
|
}
|
|
|
|
pView->OnGraphViewStyleChange(m_pGraphView);
|
|
}
|