* Atl container component implementation
*/
-
-static ULONG IOCS_AddRef(IOCS *This)
+/****** IOleClientSite *****/
+static inline IOCS *impl_from_IOleClientSite(IOleClientSite *iface)
{
- ULONG ref = InterlockedIncrement(&This->ref);
+ return CONTAINING_RECORD(iface, IOCS, IOleClientSite_iface);
+}
- TRACE( "(%p) : AddRef from %d\n", This, ref - 1 );
+static HRESULT IOCS_Detach( IOCS *This ) /* remove subclassing */
+{
+ if ( This->hWnd )
+ {
+ SetWindowLongPtrW( This->hWnd, GWLP_WNDPROC, (ULONG_PTR) This->OrigWndProc );
+ SetWindowLongPtrW( This->hWnd, GWLP_USERDATA, 0 );
+ This->hWnd = NULL;
+ }
+ if ( This->control )
+ {
+ IOleObject *control = This->control;
- return ref;
+ This->control = NULL;
+ IOleObject_Close( control, OLECLOSE_NOSAVE );
+ IOleObject_SetClientSite( control, NULL );
+ IOleObject_Release( control );
+ }
+ return S_OK;
}
-static HRESULT IOCS_QueryInterface(IOCS *This, REFIID riid, void **ppv)
+static HRESULT WINAPI OleClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
{
+ IOCS *This = impl_from_IOleClientSite(iface);
+
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
+
*ppv = NULL;
- if ( IsEqualIID( &IID_IUnknown, riid )
- || IsEqualIID( &IID_IOleClientSite, riid ) )
+ if (IsEqualIID(&IID_IUnknown, riid) ||
+ IsEqualIID(&IID_IOleClientSite, riid))
{
- *ppv = &This->IOleClientSite_iface;
- } else if ( IsEqualIID( &IID_IOleContainer, riid ) )
+ *ppv = iface;
+ }
+ else if (IsEqualIID(&IID_IOleContainer, riid))
{
*ppv = &This->IOleContainer_iface;
- } else if ( IsEqualIID( &IID_IOleInPlaceSite, riid ) || IsEqualIID( &IID_IOleInPlaceSiteEx, riid ) || IsEqualIID( &IID_IOleInPlaceSiteWindowless, riid ) )
+ }
+ else if (IsEqualIID(&IID_IOleInPlaceSite, riid) ||
+ IsEqualIID(&IID_IOleInPlaceSiteEx, riid) ||
+ IsEqualIID(&IID_IOleInPlaceSiteWindowless, riid))
{
*ppv = &This->IOleInPlaceSiteWindowless_iface;
- } else if ( IsEqualIID( &IID_IOleInPlaceFrame, riid ) )
+ }
+ else if (IsEqualIID(&IID_IOleInPlaceFrame, riid))
{
*ppv = &This->IOleInPlaceFrame_iface;
- } else if ( IsEqualIID( &IID_IOleControlSite, riid ) )
+ }
+ else if (IsEqualIID(&IID_IOleControlSite, riid))
{
*ppv = &This->IOleControlSite_iface;
}
if (*ppv)
{
- IOCS_AddRef( This );
+ IOleClientSite_AddRef(iface);
return S_OK;
}
- WARN("unsupported interface %s\n", debugstr_guid( riid ) );
- *ppv = NULL;
+ WARN("unsupported interface %s\n", debugstr_guid(riid));
return E_NOINTERFACE;
}
-static HRESULT IOCS_Detach( IOCS *This );
-static ULONG IOCS_Release(IOCS *This)
+static ULONG WINAPI OleClientSite_AddRef(IOleClientSite *iface)
+{
+ IOCS *This = impl_from_IOleClientSite(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+ TRACE("(%p)->(%d)\n", This, ref);
+ return ref;
+}
+
+static ULONG WINAPI OleClientSite_Release(IOleClientSite *iface)
{
+ IOCS *This = impl_from_IOleClientSite(iface);
ULONG ref = InterlockedDecrement(&This->ref);
- TRACE( "(%p) : ReleaseRef to %d\n", This, ref );
+ TRACE("(%p)->(%d)\n", This, ref);
if (!ref)
{
return ref;
}
-/****** IOleClientSite *****/
-static inline IOCS *impl_from_IOleClientSite(IOleClientSite *iface)
-{
- return CONTAINING_RECORD(iface, IOCS, IOleClientSite_iface);
-}
-
-static HRESULT WINAPI OleClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv)
-{
- IOCS *This = impl_from_IOleClientSite(iface);
- return IOCS_QueryInterface(This, riid, ppv);
-}
-
-static ULONG WINAPI OleClientSite_AddRef(IOleClientSite *iface)
-{
- IOCS *This = impl_from_IOleClientSite(iface);
- return IOCS_AddRef(This);
-}
-
-static ULONG WINAPI OleClientSite_Release(IOleClientSite *iface)
-{
- IOCS *This = impl_from_IOleClientSite(iface);
- return IOCS_Release(This);
-}
-
static HRESULT WINAPI OleClientSite_SaveObject(IOleClientSite *iface)
{
IOCS *This = impl_from_IOleClientSite(iface);
return E_NOTIMPL;
}
-static HRESULT WINAPI OleClientSite_GetContainer(IOleClientSite *iface, IOleContainer **ppContainer)
+static HRESULT WINAPI OleClientSite_GetContainer(IOleClientSite *iface, IOleContainer **container)
{
IOCS *This = impl_from_IOleClientSite(iface);
- TRACE( "(%p, %p)\n", This, ppContainer );
- return OleClientSite_QueryInterface( iface, &IID_IOleContainer, (void**)ppContainer );
+ TRACE("(%p, %p)\n", This, container);
+ return IOleClientSite_QueryInterface(iface, &IID_IOleContainer, (void**)container);
}
static HRESULT WINAPI OleClientSite_ShowObject(IOleClientSite *iface)
static HRESULT WINAPI OleContainer_QueryInterface( IOleContainer* iface, REFIID riid, void** ppv)
{
IOCS *This = impl_from_IOleContainer(iface);
- return IOCS_QueryInterface( This, riid, ppv );
+ return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
}
static ULONG WINAPI OleContainer_AddRef(IOleContainer* iface)
{
IOCS *This = impl_from_IOleContainer(iface);
- return IOCS_AddRef(This);
+ return IOleClientSite_AddRef(&This->IOleClientSite_iface);
}
static ULONG WINAPI OleContainer_Release(IOleContainer* iface)
{
IOCS *This = impl_from_IOleContainer(iface);
- return IOCS_Release(This);
+ return IOleClientSite_Release(&This->IOleClientSite_iface);
}
static HRESULT WINAPI OleContainer_ParseDisplayName(IOleContainer* iface, IBindCtx* pbc,
static HRESULT WINAPI OleInPlaceSiteWindowless_QueryInterface(IOleInPlaceSiteWindowless *iface, REFIID riid, void **ppv)
{
IOCS *This = impl_from_IOleInPlaceSiteWindowless(iface);
- return IOCS_QueryInterface(This, riid, ppv);
+ return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
}
static ULONG WINAPI OleInPlaceSiteWindowless_AddRef(IOleInPlaceSiteWindowless *iface)
{
IOCS *This = impl_from_IOleInPlaceSiteWindowless(iface);
- return IOCS_AddRef(This);
+ return IOleClientSite_AddRef(&This->IOleClientSite_iface);
}
static ULONG WINAPI OleInPlaceSiteWindowless_Release(IOleInPlaceSiteWindowless *iface)
{
IOCS *This = impl_from_IOleInPlaceSiteWindowless(iface);
- return IOCS_Release(This);
+ return IOleClientSite_Release(&This->IOleClientSite_iface);
}
static HRESULT WINAPI OleInPlaceSiteWindowless_GetWindow(IOleInPlaceSiteWindowless* iface, HWND* phwnd)
return S_OK;
}
static HRESULT WINAPI OleInPlaceSiteWindowless_GetWindowContext(IOleInPlaceSiteWindowless *iface,
- IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
+ IOleInPlaceFrame **frame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect,
LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo)
{
IOCS *This = impl_from_IOleInPlaceSiteWindowless(iface);
- TRACE("(%p,%p,%p,%p,%p,%p)\n", This, ppFrame, ppDoc, lprcPosRect, lprcClipRect, lpFrameInfo);
+ TRACE("(%p,%p,%p,%p,%p,%p)\n", This, frame, ppDoc, lprcPosRect, lprcClipRect, lpFrameInfo);
if ( lprcClipRect )
*lprcClipRect = This->size;
if ( lprcPosRect )
*lprcPosRect = This->size;
- if ( ppFrame )
+ if ( frame )
{
- IOCS_QueryInterface( This, &IID_IOleInPlaceFrame, (void**) ppFrame );
+ *frame = &This->IOleInPlaceFrame_iface;
+ IOleInPlaceFrame_AddRef(*frame);
}
if ( ppDoc )
static HRESULT WINAPI OleInPlaceFrame_QueryInterface(IOleInPlaceFrame *iface, REFIID riid, void **ppv)
{
IOCS *This = impl_from_IOleInPlaceFrame(iface);
- return IOCS_QueryInterface(This, riid, ppv);
+ return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
}
static ULONG WINAPI OleInPlaceFrame_AddRef(IOleInPlaceFrame *iface)
{
IOCS *This = impl_from_IOleInPlaceFrame(iface);
- return IOCS_AddRef(This);
+ return IOleClientSite_AddRef(&This->IOleClientSite_iface);
}
static ULONG WINAPI OleInPlaceFrame_Release(IOleInPlaceFrame *iface)
{
IOCS *This = impl_from_IOleInPlaceFrame(iface);
- return IOCS_Release(This);
+ return IOleClientSite_Release(&This->IOleClientSite_iface);
}
static HRESULT WINAPI OleInPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phWnd)
static HRESULT WINAPI OleControlSite_QueryInterface(IOleControlSite *iface, REFIID riid, void **ppv)
{
IOCS *This = impl_from_IOleControlSite(iface);
- return IOCS_QueryInterface(This, riid, ppv);
+ return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
}
static ULONG WINAPI OleControlSite_AddRef(IOleControlSite *iface)
{
IOCS *This = impl_from_IOleControlSite(iface);
- return IOCS_AddRef(This);
+ return IOleClientSite_AddRef(&This->IOleClientSite_iface);
}
static ULONG WINAPI OleControlSite_Release(IOleControlSite *iface)
{
IOCS *This = impl_from_IOleControlSite(iface);
- return IOCS_Release(This);
+ return IOleClientSite_Release(&This->IOleClientSite_iface);
}
static HRESULT WINAPI OleControlSite_OnControlInfoChanged( IOleControlSite* This)
OleControlSite_ShowPropertyFrame
};
-static HRESULT IOCS_Detach( IOCS *This ) /* remove subclassing */
-{
- if ( This->hWnd )
- {
- SetWindowLongPtrW( This->hWnd, GWLP_WNDPROC, (ULONG_PTR) This->OrigWndProc );
- SetWindowLongPtrW( This->hWnd, GWLP_USERDATA, 0 );
- This->hWnd = NULL;
- }
- if ( This->control )
- {
- IOleObject *control = This->control;
-
- This->control = NULL;
- IOleObject_Close( control, OLECLOSE_NOSAVE );
- IOleObject_SetClientSite( control, NULL );
- IOleObject_Release( control );
- }
- return S_OK;
-}
-
static void IOCS_OnSize( IOCS* This, LPCRECT rect )
{
SIZEL inPix, inHi;
/**********************************************************************
* Create new instance of Atl host component and attach it to window *
*/
-static HRESULT IOCS_Create( HWND hWnd, IUnknown *pUnkControl, IOCS **ppSite )
+static HRESULT IOCS_Create( HWND hWnd, IUnknown *pUnkControl, IUnknown **container )
{
HRESULT hr;
IOCS *This;
- *ppSite = NULL;
+ if (!container)
+ return S_OK;
+
+ *container = NULL;
This = HeapAlloc(GetProcessHeap(), 0, sizeof(IOCS));
if (!This)
if ( SUCCEEDED( hr ) )
hr = IOCS_Init( This );
if ( SUCCEEDED( hr ) )
- *ppSite = This;
+ *container = (IUnknown*)&This->IOleClientSite_iface;
else
- IOCS_Release( This );
+ {
+ IOCS_Detach( This );
+ HeapFree(GetProcessHeap(), 0, This);
+ }
return hr;
}
/***********************************************************************
* AtlAxAttachControl [atl100.@]
*/
-HRESULT WINAPI AtlAxAttachControl(IUnknown* pControl, HWND hWnd, IUnknown** ppUnkContainer)
+HRESULT WINAPI AtlAxAttachControl(IUnknown *control, HWND hWnd, IUnknown **container)
{
- IOCS *pUnkContainer;
HRESULT hr;
- TRACE( "%p %p %p\n", pControl, hWnd, ppUnkContainer );
+ TRACE("(%p %p %p)\n", control, hWnd, container);
- if (!pControl)
+ if (!control)
return E_INVALIDARG;
- hr = IOCS_Create( hWnd, pControl, &pUnkContainer );
- if ( SUCCEEDED( hr ) && ppUnkContainer)
- {
- *ppUnkContainer = (IUnknown*) pUnkContainer;
- }
-
- if(!hWnd)
- return S_FALSE;
-
- return hr;
+ hr = IOCS_Create( hWnd, control, container );
+ return hWnd ? hr : S_FALSE;
}
/**********************************************************************
* AtlAxGetHost [atl100.@]
*
*/
-HRESULT WINAPI AtlAxGetHost(HWND hWnd, IUnknown **pUnk)
+HRESULT WINAPI AtlAxGetHost(HWND hWnd, IUnknown **host)
{
IOCS *This;
- TRACE( "(%p, %p)\n", hWnd, pUnk );
+ TRACE("(%p, %p)\n", hWnd, host);
- *pUnk = NULL;
+ *host = NULL;
This = (IOCS*) GetWindowLongPtrW( hWnd, GWLP_USERDATA );
if ( !This )
return E_FAIL;
}
- return IOCS_QueryInterface( This, &IID_IUnknown, (void**) pUnk );
+ return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, &IID_IUnknown, (void**)host);
}
/***********************************************************************
FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_a(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
return 0;
}
+
+#if _ATL_VER >= _ATL_VER_80
+
+/***********************************************************************
+ * AtlAxCreateControlLic [atl100.59]
+ *
+ */
+HRESULT WINAPI AtlAxCreateControlLic(const WCHAR *lpTricsData, HWND hwnd, IStream *stream, IUnknown **container, BSTR lic)
+{
+ FIXME("(%s %p %p %p %s)\n", debugstr_w(lpTricsData), hwnd, stream, container, debugstr_w(lic));
+ return E_NOTIMPL;
+}
+
+/***********************************************************************
+ * AtlAxCreateControlLicEx [atl100.60]
+ *
+ */
+HRESULT WINAPI AtlAxCreateControlLicEx(const WCHAR *lpTricsData, HWND hwnd, IStream *stream,
+ IUnknown **container, IUnknown **control, REFIID iidSink, IUnknown *punkSink, BSTR lic)
+{
+ FIXME("(%s %p %p %p %p %s %p %s)\n", debugstr_w(lpTricsData), hwnd, stream, container, control,
+ debugstr_guid(iidSink), punkSink, debugstr_w(lic));
+ return E_NOTIMPL;
+}
+
+#endif