static LRESULT IOCS_OnWndProc( IOCS *This, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { WNDPROC OrigWndProc = This->OrigWndProc; switch( uMsg ) { case WM_DESTROY: IOCS_Detach( This ); break; case WM_SIZE: { RECT r; r.left = r.top = 0; r.right = LOWORD( lParam ); r.bottom = HIWORD( lParam ); IOCS_OnSize( This, &r ); } break; case WM_SHOWWINDOW: IOCS_OnShow( This, (BOOL) wParam ); break; case WM_PAINT: IOCS_OnDraw( This ); break; } return CallWindowProcW( OrigWndProc, hWnd, uMsg, wParam, lParam ); }
static ULONG IOCS_Release(IOCS *This) { ULONG ref = InterlockedDecrement(&This->ref); TRACE( "(%p) : ReleaseRef to %d\n", This, ref ); if (!ref) { IOCS_Detach( This ); HeapFree( GetProcessHeap(), 0, This ); } return ref; }
static ULONG WINAPI OleClientSite_Release(IOleClientSite *iface) { IOCS *This = impl_from_IOleClientSite(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p)->(%d)\n", This, ref); if (!ref) { IOCS_Detach( This ); HeapFree( GetProcessHeap(), 0, This ); } return ref; }
/********************************************************************** * Create new instance of Atl host component and attach it to window * */ static HRESULT IOCS_Create( HWND hWnd, IUnknown *pUnkControl, IUnknown **container ) { HRESULT hr; IOCS *This; if (!container) return S_OK; *container = NULL; This = HeapAlloc(GetProcessHeap(), 0, sizeof(IOCS)); if (!This) return E_OUTOFMEMORY; This->IOleClientSite_iface.lpVtbl = &OleClientSite_vtbl; This->IOleContainer_iface.lpVtbl = &OleContainer_vtbl; This->IOleInPlaceSiteWindowless_iface.lpVtbl = &OleInPlaceSiteWindowless_vtbl; This->IOleInPlaceFrame_iface.lpVtbl = &OleInPlaceFrame_vtbl; This->IOleControlSite_iface.lpVtbl = &OleControlSite_vtbl; This->ref = 1; This->OrigWndProc = NULL; This->hWnd = NULL; This->fWindowless = This->fActive = This->fInPlace = FALSE; hr = IOCS_Attach( This, hWnd, pUnkControl ); if ( SUCCEEDED( hr ) ) hr = IOCS_Init( This ); if ( SUCCEEDED( hr ) ) *container = (IUnknown*)&This->IOleClientSite_iface; else { IOCS_Detach( This ); HeapFree(GetProcessHeap(), 0, This); } return hr; }