]> git.sesse.net Git - casparcg/blob - core/producer/silverlight/XcpControlHost.h
1098b95326a6cff63c9e03a68ff6d3f769edefa3
[casparcg] / core / producer / silverlight / XcpControlHost.h
1 // XcpControlHost.h : Declaration of the XcpControlHost\r
2 \r
3 #pragma once\r
4 \r
5 #include <atlbase.h>\r
6 #include <atlcom.h>\r
7 #include <atlctl.h>\r
8 \r
9 #include "xcpctrl_h.h"\r
10 \r
11 #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)\r
12 #error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."\r
13 #endif\r
14 \r
15 \r
16 class XcpControlHost \r
17         : public ATL::CAxHostWindow\r
18         , public IXcpControlHost2\r
19 {\r
20         HWND hControlWindow;\r
21         IUnknown* m_pUnKnown;\r
22         IXcpControl2* m_pControl;\r
23 public: \r
24         XcpControlHost();\r
25         ~XcpControlHost();\r
26 \r
27         typedef enum\r
28         {\r
29                 XcpHostOption_FreezeOnInitialFrame       = 0x001,\r
30                 XcpHostOption_DisableFullScreen          = 0x002,\r
31                 XcpHostOption_DisableManagedExecution    = 0x008,\r
32                 XcpHostOption_EnableCrossDomainDownloads = 0x010,\r
33                 XcpHostOption_UseCustomAppDomain         = 0x020,\r
34                 XcpHostOption_DisableNetworking          = 0x040,        \r
35                 XcpHostOption_DisableScriptCallouts      = 0x080,\r
36                 XcpHostOption_EnableHtmlDomAccess        = 0x100,\r
37                 XcpHostOption_EnableScriptableObjectAccess = 0x200,\r
38         } XcpHostOptions;\r
39 \r
40         \r
41    // IXcpControlHost implementation declarations\r
42         STDMETHOD(GetHostOptions)(DWORD* pdwOptions);\r
43         STDMETHOD(NotifyLoaded)();\r
44         STDMETHOD(NotifyError)(BSTR bstrError, BSTR bstrSource, long nLine, long nColumn);\r
45         STDMETHOD(InvokeHandler)(BSTR bstrName, VARIANT varParam1, VARIANT varParam2, VARIANT* pvarResult);\r
46         STDMETHOD(GetBaseUrl)(BSTR* pbstrUrl);\r
47         STDMETHOD(GetNamedSource)(BSTR bstrSourceID, BSTR* pbstrSource);\r
48         STDMETHOD(DownloadUrl)(BSTR bstrUrl, IXcpControlDownloadCallback* pCallback, IStream** ppStream);\r
49         STDMETHOD(GetCustomAppDomain)(IUnknown** ppAppDomain);\r
50         STDMETHOD(GetControlVersion)(UINT *puMajorVersion, UINT *puMinorVersion);\r
51         \r
52         // Infrastructure for control creation.\r
53         HRESULT CreateXcpControl(HWND hwnd);\r
54         HRESULT DestroyXcpControl();\r
55 \r
56         DECLARE_NOT_AGGREGATABLE(XcpControlHost);\r
57 \r
58         BEGIN_COM_MAP(XcpControlHost)\r
59                 COM_INTERFACE_ENTRY(IXcpControlHost2)\r
60                 COM_INTERFACE_ENTRY_CHAIN(CAxHostWindow)\r
61         END_COM_MAP()\r
62         \r
63         BEGIN_MSG_MAP(XcpControlHost)\r
64            CHAIN_MSG_MAP(CAxHostWindow)\r
65         END_MSG_MAP()\r
66 \r
67         //IServiceProvider Implementation\r
68         STDMETHOD(QueryService)(REFGUID rsid, REFIID riid, void** ppvObj);\r
69 \r
70         // ATL Overrides\r
71         STDMETHOD(AttachControl)(IUnknown* pUnkControl, HWND hWnd);\r
72         HRESULT ActivateXcpControl(IUnknown* pUnkControl);\r
73         \r
74         IXcpControl2* GetXcpControlPtr()\r
75         {\r
76                 return m_pControl;\r
77         }\r
78 };\r
79 \r