|
|
// 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); }
|