SimpleNotifyReflector.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef __SimpleNotifyReflector_h__
  2. #define __SimpleNotifyReflector_h__
  3. /////////////////////////////////////////////////////////////////////////////
  4. // SimpleNotifyReflector.h | Declaration of the TCSimpleNotifyReflector
  5. // class.
  6. //
  7. /////////////////////////////////////////////////////////////////////////////
  8. // TCSimpleNotifyReflector_Base
  9. class ATL_NO_VTABLE TCSimpleNotifyReflector_Base :
  10. public IPropertyNotifySink
  11. {
  12. // Construction
  13. public:
  14. TCSimpleNotifyReflector_Base(DISPID dispid) :
  15. m_dispid(dispid)
  16. {
  17. }
  18. // IUnknown Interface Methods
  19. public:
  20. STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject)
  21. {
  22. CLEAROUT(ppvObject, (void*)NULL);
  23. if (IID_IUnknown == riid || IID_IPropertyNotifySink == riid)
  24. {
  25. *ppvObject = (IPropertyNotifySink*)this;
  26. return S_OK;
  27. }
  28. return E_NOINTERFACE;
  29. }
  30. STDMETHODIMP_(ULONG) AddRef()
  31. {
  32. return 1;
  33. }
  34. STDMETHODIMP_(ULONG) Release()
  35. {
  36. return 1;
  37. }
  38. // IPropertyNotifySink Interface Methods
  39. public:
  40. STDMETHODIMP OnChanged(DISPID dispID) = 0;
  41. STDMETHODIMP OnRequestEdit(DISPID dispID) = 0;
  42. // Data Members
  43. protected:
  44. DISPID m_dispid;
  45. };
  46. /////////////////////////////////////////////////////////////////////////////
  47. // TCSimpleNotifyReflector
  48. template <class T>
  49. class TCSimpleNotifyReflector :
  50. public TCSimpleNotifyReflector_Base
  51. {
  52. // Construction
  53. public:
  54. TCSimpleNotifyReflector(T* pThis, DISPID dispid) :
  55. TCSimpleNotifyReflector_Base(dispid),
  56. m_pThis(pThis)
  57. {
  58. }
  59. // IPropertyNotifySink Interface Methods
  60. public:
  61. STDMETHODIMP OnChanged(DISPID)
  62. {
  63. return m_pThis->FireOnChanged(m_dispid);
  64. }
  65. STDMETHODIMP OnRequestEdit(DISPID)
  66. {
  67. return m_pThis->FireOnRequestEdit(m_dispid);
  68. }
  69. // Types
  70. public:
  71. typedef TCSimpleNotifyReflector<T> TCSimpleNotifyReflectorBase;
  72. // Data Members
  73. protected:
  74. T* m_pThis;
  75. };
  76. /////////////////////////////////////////////////////////////////////////////
  77. #endif // !__SimpleNotifyReflector_h__