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