associated.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #include <ocidl.h>
  2. // AX.H
  3. #ifndef _AX_H
  4. #define _AX_H
  5. // messages
  6. #define AX_QUERYINTERFACE (WM_USER + 1)
  7. #define AX_INPLACE (WM_USER + 2)
  8. #define AX_GETAXINTERFACE (WM_USER + 3)
  9. #define AX_CONNECTOBJECT (WM_USER + 4)
  10. #define AX_DISCONNECTOBJECT (WM_USER + 5)
  11. #define AX_SETDATAADVISE (WM_USER + 6)
  12. #define AX_DOVERB (WM_USER + 7)
  13. #define AX_SETCOMMANDCALLBACK (WM_USER + 8)
  14. #define AX_SETDISPATCHNOTIFICATION (WM_USER + 9)
  15. #define AX_SETSERVICEPROVIDER (WM_USER + 10)
  16. #define AX_SETDISPATCHNOTIFICATIONFUNC (WM_USER + 11)
  17. #define AX_RECREATE (WM_USER + 12)
  18. // notifications
  19. #define AXN_SIZE 1
  20. // Registration function
  21. ATOM AXRegister();
  22. int AXConnectObject(IUnknown* Container, REFIID riid, IUnknown* Advisor, IConnectionPointContainer** picpc, IConnectionPoint** picp);
  23. void AXDisconnectObject(IConnectionPointContainer* icpc, IConnectionPoint* icp, unsigned int Cookie);
  24. struct AX_CONNECTSTRUCT
  25. {
  26. IUnknown* Advisor;
  27. IConnectionPointContainer* icpc;
  28. IConnectionPoint* icp;
  29. DWORD id;
  30. CLSID SpecialIIDForceOK;
  31. };
  32. #pragma warning(disable:4584)
  33. // Class AXClientSide
  34. class AXClientSite :
  35. public IOleClientSite,
  36. public IUnknown,
  37. public IServiceProvider,
  38. public IDispatch,
  39. public IAdviseSink,
  40. public IOleInPlaceSite,
  41. public IOleInPlaceFrame
  42. {
  43. protected:
  44. int refNum;
  45. public:
  46. HWND Window;
  47. HWND Parent;
  48. HMENU Menu;
  49. bool InPlace;
  50. bool ExternalPlace;
  51. bool CalledCanInPlace;
  52. CLSID SpecialIIDForceOK;
  53. class AX* ax;
  54. // MyClientSite Methods
  55. AXClientSite();
  56. virtual ~AXClientSite();
  57. STDMETHODIMP_(void) OnDataChange2(FORMATETC*);
  58. // IUnknown methods
  59. STDMETHODIMP QueryInterface(REFIID iid, void**ppvObject);
  60. STDMETHODIMP_(ULONG) AddRef();
  61. STDMETHODIMP_(ULONG) Release();
  62. // IServiceProvider methods
  63. STDMETHODIMP QueryService(REFGUID guid, REFIID iid, void ** ppvObject);
  64. // IOleClientSite methods
  65. STDMETHODIMP SaveObject();
  66. STDMETHODIMP GetMoniker(DWORD dwA, DWORD dwW, IMoniker**pm);
  67. STDMETHODIMP GetContainer(IOleContainer**pc);
  68. STDMETHODIMP ShowObject();
  69. STDMETHODIMP OnShowWindow(BOOL f);
  70. STDMETHODIMP RequestNewObjectLayout();
  71. // IAdviseSink methods
  72. STDMETHODIMP_(void) OnDataChange(FORMATETC *pFormatEtc, STGMEDIUM *pStgmed);
  73. STDMETHODIMP_(void) OnViewChange(DWORD dwAspect, LONG lIndex);
  74. STDMETHODIMP_(void) OnRename(IMoniker * pmk);
  75. STDMETHODIMP_(void) OnSave();
  76. STDMETHODIMP_(void) OnClose();
  77. // IOleInPlaceSite methods
  78. STDMETHODIMP GetWindow(HWND *p);
  79. STDMETHODIMP ContextSensitiveHelp(BOOL);
  80. STDMETHODIMP CanInPlaceActivate();
  81. STDMETHODIMP OnInPlaceActivate();
  82. STDMETHODIMP OnUIActivate();
  83. STDMETHODIMP GetWindowContext(IOleInPlaceFrame** ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT r1, LPRECT r2, LPOLEINPLACEFRAMEINFO o);
  84. STDMETHODIMP Scroll(SIZE s);
  85. STDMETHODIMP OnUIDeactivate(int);
  86. STDMETHODIMP OnInPlaceDeactivate();
  87. STDMETHODIMP DiscardUndoState();
  88. STDMETHODIMP DeactivateAndUndo();
  89. STDMETHODIMP OnPosRectChange(LPCRECT);
  90. // IOleInPlaceFrame methods
  91. STDMETHODIMP GetBorder(LPRECT l);
  92. STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS);
  93. STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS w);
  94. STDMETHODIMP SetActiveObject(IOleInPlaceActiveObject*pV, LPCOLESTR s);
  95. STDMETHODIMP InsertMenus(HMENU h, LPOLEMENUGROUPWIDTHS x);
  96. STDMETHODIMP SetMenu(HMENU h, HOLEMENU hO, HWND hw);
  97. STDMETHODIMP RemoveMenus(HMENU h);
  98. STDMETHODIMP SetStatusText(LPCOLESTR t);
  99. STDMETHODIMP EnableModeless(BOOL f);
  100. STDMETHODIMP TranslateAccelerator(LPMSG, WORD);
  101. // IDispatch Methods
  102. HRESULT _stdcall GetTypeInfoCount(unsigned int * pctinfo);
  103. HRESULT _stdcall GetTypeInfo(unsigned int iTInfo, LCID lcid, ITypeInfo FAR* FAR* ppTInfo);
  104. HRESULT _stdcall GetIDsOfNames(REFIID riid, OLECHAR FAR* FAR*, unsigned int cNames, LCID lcid, DISPID FAR*);
  105. HRESULT _stdcall Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, EXCEPINFO FAR* pExcepInfo, unsigned int FAR* puArgErr);
  106. // IOleControlSite Methods
  107. };
  108. // Class AX
  109. class AX
  110. {
  111. public:
  112. AX(char* clsid);
  113. CLSID GetCLSID();
  114. ~AX();
  115. void Init(char* clsid);
  116. void Clean();
  117. AXClientSite Site;
  118. IID* iid;
  119. IOleObject* OleObject;
  120. IStorage* Storage;
  121. IViewObject* View;
  122. IDataObject* Data;
  123. IUnknown* Unk;
  124. IOleInPlaceActiveObject* Pao;
  125. IServiceProvider* CustomServiceProvider;
  126. AX_CONNECTSTRUCT* tcs;
  127. bool AddMenu;
  128. DWORD AdviseToken;
  129. DWORD DAdviseToken[100];
  130. HWND CommandCallbackWindow;
  131. HWND DispatchNotificationWindow;
  132. void(__stdcall *DispatchNotificationFunction)(struct AXDISPATCHNOTIFICATION*);
  133. UINT DispatchNotificationMessage;
  134. private:
  135. CLSID clsid;
  136. };
  137. struct AXDISPATCHNOTIFICATION
  138. {
  139. class AX* ax;
  140. DISPID dispIdMember;
  141. REFIID riid;
  142. LCID lcid;
  143. WORD wFlags;
  144. DISPPARAMS FAR* pDispParams;
  145. VARIANT FAR* pVarResult;
  146. EXCEPINFO FAR* pExcepInfo;
  147. unsigned int FAR* puArgErr;
  148. };
  149. #endif // _AX_H