WindowsXP-SP1/admin/controls/smonctrl/iconnpt.h
2020-09-30 16:53:49 +02:00

147 lines
4.0 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_