SourceObj.cpp
上传用户:biuytresa
上传日期:2007-12-07
资源大小:721k
文件大小:3k
源码类别:

DNA

开发平台:

Visual C++

  1. // SourceObj.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "SourceComp.h"
  5. #include "SourceObj.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CSourceObj
  13. IMPLEMENT_DYNCREATE(CSourceObj, CCmdTarget)
  14. CSourceObj::CSourceObj()
  15. {
  16. EnableAutomation();
  17. EnableConnections();
  18. }
  19. CSourceObj::~CSourceObj()
  20. {
  21. }
  22. void CSourceObj::OnFinalRelease()
  23. {
  24. // When the last reference for an automation object is released
  25. // OnFinalRelease is called.  The base class will automatically
  26. // deletes the object.  Add additional cleanup required for your
  27. // object before calling the base class.
  28. CCmdTarget::OnFinalRelease();
  29. }
  30. BEGIN_MESSAGE_MAP(CSourceObj, CCmdTarget)
  31. //{{AFX_MSG_MAP(CSourceObj)
  32. // NOTE - the ClassWizard will add and remove mapping macros here.
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. BEGIN_DISPATCH_MAP(CSourceObj, CCmdTarget)
  36. //{{AFX_DISPATCH_MAP(CSourceObj)
  37. DISP_PROPERTY_EX(CSourceObj, "MyProperty", GetMyProperty, SetMyProperty, VT_I4)
  38. //}}AFX_DISPATCH_MAP
  39. END_DISPATCH_MAP()
  40. // Note: we add support for IID_ISourceObj to support typesafe binding
  41. //  from VBA.  This IID must match the GUID that is attached to the 
  42. //  dispinterface in the .ODL file.
  43. // {B77C2984-56DD-11CF-B355-00104B08CC22}
  44. static const IID IID_ISourceObj =
  45. { 0xb77c2984, 0x56dd, 0x11cf, { 0xb3, 0x55, 0x0, 0x10, 0x4b, 0x8, 0xcc, 0x22 } };
  46. // {B77C2985-56DD-11CF-B355-00104B08CC22}
  47. static const IID IID_IEventSet =
  48. { 0xb77c2985, 0x56dd, 0x11cf, { 0xb3, 0x55, 0x0, 0x10, 0x4b, 0x8, 0xcc, 0x22 } };
  49. IMPLEMENT_OLECREATE(CSourceObj, "SourceComp.SourceObj",
  50. 0xb77c2986, 0x56dd, 0x11cf, 0xb3, 0x55, 0x0, 0x10, 0x4b, 0x8, 0xcc, 0x22 )
  51. BEGIN_INTERFACE_MAP(CSourceObj, CCmdTarget)
  52. INTERFACE_PART(CSourceObj, IID_ISourceObj, Dispatch)
  53. INTERFACE_PART(CSourceObj, IID_IConnectionPointContainer, ConnPtContainer)
  54. END_INTERFACE_MAP()
  55. BEGIN_CONNECTION_MAP(CSourceObj, CCmdTarget)
  56. CONNECTION_PART(CSourceObj, IID_IEventSet, EventSetConnPt)
  57. END_CONNECTION_MAP()
  58. /////////////////////////////////////////////////////////////////////////////
  59. // CSourceObj message handlers
  60. void CSourceObj::FirePropChanged (long nInt)
  61. {
  62. COleDispatchDriver driver;
  63. POSITION pos = m_xEventSetConnPt.GetStartPosition();
  64. LPDISPATCH pDispatch;
  65. while (pos != NULL)
  66. {
  67. pDispatch = (LPDISPATCH) m_xEventSetConnPt.GetNextConnection(pos);
  68. ASSERT(pDispatch != NULL);
  69. driver.AttachDispatch(pDispatch, FALSE);
  70. TRY
  71. driver.InvokeHelper(0/*eventidPropChanged*/, DISPATCH_METHOD, VT_EMPTY, NULL,
  72. (BYTE *)(VTS_I4), nInt);
  73. END_TRY
  74. driver.DetachDispatch();
  75. }
  76. }
  77. REFIID CSourceObj::XEventSetConnPt::GetIID(void)
  78. {
  79. return IID_IEventSet;
  80. }
  81. long CSourceObj::GetMyProperty() 
  82. {
  83. // TODO: Add your property handler here
  84. return mProperty;
  85. }
  86. void CSourceObj::SetMyProperty(long nNewValue) 
  87. {
  88. mProperty = nNewValue;
  89. FirePropChanged (mProperty);
  90. }