Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
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_
|