1 // SOActiveX.h : Declaration of the CSOActiveX 2 3 #ifndef __SOACTIVEX_H_ 4 #define __SOACTIVEX_H_ 5 6 #include "resource.h" // main symbols 7 8 #pragma warning (disable:4505) 9 // permanently suppress "unreferenced local function has been removed" warning 10 11 #pragma warning (push,1) 12 #pragma warning (disable:4265) 13 14 #include <ExDispID.h> 15 #include <ExDisp.h> 16 #include <shlguid.h> 17 18 #if defined(_MSC_VER) && (_MSC_VER >= 1300) 19 #undef _DEBUG 20 #endif 21 #include <atlctl.h> 22 23 #include "so_activex.h" 24 25 #pragma warning (pop) 26 27 class SODispatchInterceptor; 28 29 enum SOVersion { 30 SO_NOT_DETECTED = 0, 31 SO_52, 32 SO_60, 33 SO_61, 34 SO_UNKNOWN, 35 OO_10, 36 OO_11, 37 OO_UNKNOWN 38 }; 39 40 ///////////////////////////////////////////////////////////////////////////// 41 // CSOActiveX 42 class ATL_NO_VTABLE CSOActiveX : 43 public CComObjectRootEx<CComSingleThreadModel>, 44 public IDispatchImpl<ISOActiveX, &IID_ISOActiveX, &LIBID_SO_ACTIVEXLib>, 45 public CComControl<CSOActiveX>, 46 public IPersistStreamInitImpl<CSOActiveX>, 47 public IOleControlImpl<CSOActiveX>, 48 public IOleObjectImpl<CSOActiveX>, 49 public IOleInPlaceActiveObjectImpl<CSOActiveX>, 50 public IViewObjectExImpl<CSOActiveX>, 51 public IOleInPlaceObjectWindowlessImpl<CSOActiveX>, 52 // public IConnectionPointContainerImpl<CSOActiveX>, 53 public CComCoClass<CSOActiveX, &CLSID_SOActiveX>, 54 // public CProxy_ItryPluginEvents< CSOActiveX >, 55 public IPersistPropertyBagImpl< CSOActiveX >, 56 public IProvideClassInfo2Impl< &CLSID_SOActiveX, 57 &DIID__ISOActiveXEvents, 58 &LIBID_SO_ACTIVEXLib >, 59 public IObjectSafetyImpl< CSOActiveX, 60 INTERFACESAFE_FOR_UNTRUSTED_DATA > 61 { 62 protected: 63 CComPtr<IWebBrowser2> mWebBrowser2; 64 DWORD mCookie; 65 66 CComPtr<IDispatch> mpDispFactory; 67 CComPtr<IDispatch> mpDispFrame; 68 CComPtr<IDispatch> mpInstanceLocker; 69 CComPtr<IDispatch> mpDispWin; 70 OLECHAR* mCurFileUrl; 71 BOOL mbLoad; 72 BOOL mbViewOnly; 73 WNDCLASS mPWinClass; 74 HWND mParentWin; 75 HWND mOffWin; 76 77 SODispatchInterceptor* mpDispatchInterceptor; 78 SOVersion mnVersion; 79 80 BOOL mbReadyForActivation; 81 CComPtr<IDispatch> mpDispTempFile; 82 83 BOOL mbDrawLocked; 84 85 public: 86 CSOActiveX(); 87 ~CSOActiveX(); 88 89 DECLARE_REGISTRY_RESOURCEID(IDR_SOACTIVEX) 90 91 DECLARE_PROTECT_FINAL_CONSTRUCT() 92 93 BEGIN_COM_MAP(CSOActiveX) 94 COM_INTERFACE_ENTRY(ISOActiveX) 95 COM_INTERFACE_ENTRY(IDispatch) 96 COM_INTERFACE_ENTRY(IViewObjectEx) 97 COM_INTERFACE_ENTRY(IViewObject2) 98 COM_INTERFACE_ENTRY(IViewObject) 99 COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless) 100 COM_INTERFACE_ENTRY(IOleInPlaceObject) 101 COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless) 102 COM_INTERFACE_ENTRY(IOleInPlaceActiveObject) 103 COM_INTERFACE_ENTRY(IOleControl) 104 COM_INTERFACE_ENTRY(IOleObject) 105 COM_INTERFACE_ENTRY(IPersistStreamInit) 106 COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit) 107 // COM_INTERFACE_ENTRY(IConnectionPointContainer) 108 COM_INTERFACE_ENTRY(IProvideClassInfo) 109 COM_INTERFACE_ENTRY(IProvideClassInfo2) 110 COM_INTERFACE_ENTRY(IPersistPropertyBag) 111 COM_INTERFACE_ENTRY(IObjectSafety) 112 END_COM_MAP() 113 114 BEGIN_PROP_MAP(CSOActiveX) 115 PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4) 116 PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4) 117 // Example entries 118 // PROP_ENTRY("Property Description", dispid, clsid) 119 // PROP_PAGE(CLSID_StockColorPage) 120 END_PROP_MAP() 121 122 BEGIN_CONNECTION_POINT_MAP(CSOActiveX) 123 END_CONNECTION_POINT_MAP() 124 125 BEGIN_MSG_MAP(CSOActiveX) 126 CHAIN_MSG_MAP(CComControl<CSOActiveX>) 127 DEFAULT_REFLECTION_HANDLER() 128 END_MSG_MAP() 129 // Handler prototypes: 130 // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 131 // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 132 // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled); 133 134 135 136 // IViewObjectEx 137 DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE) 138 139 // ISOActiveX 140 public: 141 142 STDMETHOD(SetClientSite)( IOleClientSite* aClientSite ); 143 STDMETHOD(Invoke)( DISPID dispidMember, 144 REFIID riid, 145 LCID lcid, 146 WORD wFlags, 147 DISPPARAMS* pDispParams, 148 VARIANT* pvarResult, 149 EXCEPINFO* pExcepInfo, 150 UINT* puArgErr); 151 STDMETHOD(Load) ( LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog ); 152 STDMETHOD(Load) ( LPSTREAM pStm ); 153 STDMETHOD(InitNew) (); 154 HRESULT OnDrawAdvanced(ATL_DRAWINFO& di); 155 HRESULT OnDraw(ATL_DRAWINFO& di); 156 157 HRESULT SetLayoutManagerProps(); 158 HRESULT CreateFrameOldWay( HWND hwnd, int width, int height ); 159 HRESULT GetUnoStruct( OLECHAR* sStructName, CComPtr<IDispatch>& pdispResult ); 160 HRESULT LoadURLToFrame(); 161 HRESULT CallDispatchMethod( OLECHAR* sUrl, CComVariant* sArgNames, CComVariant* sArgVal, unsigned int count ); 162 HRESULT CallLoadComponentFromURL1PBool( OLECHAR* sUrl, OLECHAR* sArgName, BOOL sArgVal ); 163 HRESULT GetUrlStruct( OLECHAR* sUrl, CComPtr<IDispatch>& pdispUrl ); 164 HRESULT Cleanup(); 165 HRESULT TerminateOffice(); 166 HRESULT GetURL( const OLECHAR* url, 167 const OLECHAR* target ); 168 169 void CallbackCreateXInputStream( CBindStatusCallback<CSOActiveX>* pbsc, BYTE* pBytes, DWORD dwSize ); 170 171 172 SOVersion GetVersionConnected(); 173 }; 174 175 #endif //__SOACTIVEX_H_ 176 177