147 lines
3.9 KiB
C++
147 lines
3.9 KiB
C++
/*++
|
|
|
|
Copyright (C) 1996-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
iconnpt.h
|
|
|
|
Abstract:
|
|
|
|
Header file for connection points.
|
|
|
|
--*/
|
|
|
|
#ifndef _ICONNPT_H_
|
|
#define _ICONNPT_H_
|
|
|
|
|
|
// Event types
|
|
// These values match the ID's in smonctrl.odl
|
|
enum {
|
|
eEventOnCounterSelected=1,
|
|
eEventOnCounterAdded=2,
|
|
eEventOnCounterDeleted=3,
|
|
eEventOnSampleCollected=4,
|
|
eEventOnDblClick=5
|
|
};
|
|
|
|
// Connection Point Types
|
|
enum {
|
|
eConnectionPointDirect=0,
|
|
eConnectionPointDispatch=1
|
|
};
|
|
#define CONNECTION_POINT_CNT 2
|
|
|
|
|
|
// Connection Point Class
|
|
class CImpIConnectionPoint : public IConnectionPoint {
|
|
|
|
public:
|
|
CImpIConnectionPoint(void);
|
|
~CImpIConnectionPoint(void);
|
|
|
|
//IUnknown members
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
//IConnectionPoint members
|
|
STDMETHODIMP GetConnectionInterface(IID *);
|
|
STDMETHODIMP GetConnectionPointContainer (IConnectionPointContainer **);
|
|
STDMETHODIMP Advise(LPUNKNOWN, DWORD *);
|
|
STDMETHODIMP Unadvise(DWORD);
|
|
STDMETHODIMP EnumConnections(IEnumConnections **);
|
|
|
|
//Members not exposed by IConnectionPoint
|
|
void Init(PCPolyline pObj, LPUNKNOWN PUnkOuter, INT iConnPtType);
|
|
void SendEvent(UINT uEventType, DWORD dwParam); // Send event to sink
|
|
|
|
private:
|
|
|
|
enum IConnPtConstant {
|
|
eAdviseKey = 1234,
|
|
eEventSinkWaitInterval = 2000
|
|
};
|
|
|
|
DWORD InitEventSinkLock ( void );
|
|
void DeinitEventSinkLock ( void );
|
|
BOOL EnterSendEvent ( void );
|
|
void ExitSendEvent ( void );
|
|
void EnterUnadvise ( void );
|
|
void ExitUnadvise ( void );
|
|
|
|
ULONG m_cRef; //Object reference count
|
|
LPUNKNOWN m_pUnkOuter; //Controlling unknown
|
|
PCPolyline m_pObj; //Containing object
|
|
INT m_iConnPtType; // Direct or dispatch connection
|
|
HANDLE m_hEventEventSink;
|
|
LONG m_lUnadviseRefCount;
|
|
LONG m_lSendEventRefCount;
|
|
|
|
union {
|
|
IDispatch *pIDispatch; // Outgoing interface
|
|
ISystemMonitorEvents *pIDirect;
|
|
} m_Connection;
|
|
|
|
};
|
|
|
|
typedef CImpIConnectionPoint *PCImpIConnectionPoint;
|
|
|
|
|
|
|
|
// Connection Point Container Class
|
|
class CImpIConnPtCont : public IConnectionPointContainer
|
|
{
|
|
public:
|
|
CImpIConnPtCont(PCPolyline, LPUNKNOWN);
|
|
~CImpIConnPtCont(void);
|
|
|
|
//IUnknown members
|
|
STDMETHODIMP QueryInterface(REFIID, PPVOID);
|
|
STDMETHODIMP_(DWORD) AddRef(void);
|
|
STDMETHODIMP_(DWORD) Release(void);
|
|
|
|
//IConnectionPointContainer members
|
|
STDMETHODIMP EnumConnectionPoints(IEnumConnectionPoints **);
|
|
STDMETHODIMP FindConnectionPoint(REFIID, IConnectionPoint **);
|
|
|
|
private:
|
|
|
|
ULONG m_cRef; //Interface ref count
|
|
PCPolyline m_pObj; //Back pointer to object
|
|
LPUNKNOWN m_pUnkOuter; //Controlling unknown
|
|
|
|
};
|
|
|
|
typedef CImpIConnPtCont *PCImpIConnPtCont;
|
|
|
|
|
|
// Connection Point Enumerator Class
|
|
class CImpIEnumConnPt : public IEnumConnectionPoints
|
|
{
|
|
protected:
|
|
CImpIConnPtCont *m_pConnPtCont;
|
|
DWORD m_cRef;
|
|
ULONG m_cItems;
|
|
ULONG m_uCurrent;
|
|
const IID **m_apIID;
|
|
|
|
public:
|
|
|
|
CImpIEnumConnPt (CImpIConnPtCont *pConnPtCont, const IID **apIID, ULONG cItems);
|
|
|
|
// IUnknown methods
|
|
STDMETHOD(QueryInterface) (REFIID riid, LPVOID *ppvObj);
|
|
STDMETHOD_(ULONG, AddRef) ();
|
|
STDMETHOD_(ULONG, Release) ();
|
|
|
|
// Enum methods
|
|
STDMETHOD(Next) (ULONG cItems, IConnectionPoint **apConnPt, ULONG *pcReturned);
|
|
STDMETHOD(Skip) (ULONG cSkip);
|
|
STDMETHOD(Reset) (VOID);
|
|
STDMETHOD(Clone) (IEnumConnectionPoints **pIEnum);
|
|
};
|
|
|
|
|
|
#endif //_ICONNPT_H_
|