case OLEIVERB_SHOW:
case OLEIVERB_OPEN:
case OLEIVERB_INPLACEACTIVATE:
- if( NULL == hwndParent )
- return OLEOBJ_S_INVALIDHWND;
-
- if( SUCCEEDED(doInPlaceActivate(lpMsg, pActiveSite, hwndParent, lprcPosRect)) )
- return S_OK;
-
- return OLEOBJ_S_CANNOT_DOVERB_NOW;
+ return doInPlaceActivate(lpMsg, pActiveSite, hwndParent, lprcPosRect);
case OLEIVERB_HIDE:
_p_instance->setVisible(FALSE);
return S_OK;
default:
- if( NULL == hwndParent )
- return OLEOBJ_S_INVALIDHWND;
-
- if( SUCCEEDED(doInPlaceActivate(lpMsg, pActiveSite, hwndParent, lprcPosRect)) )
- return OLEOBJ_S_INVALIDVERB;
-
- return OLEOBJ_S_CANNOT_DOVERB_NOW;
+ return OLEOBJ_S_INVALIDVERB;
}
};
if( SUCCEEDED(pActiveSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
{
if( S_OK != p_inPlaceSite->CanInPlaceActivate() )
- return E_FAIL;
+ return OLEOBJ_S_CANNOT_DOVERB_NOW;
LPOLEINPLACEFRAME p_inPlaceFrame;
LPOLEINPLACEUIWINDOW p_inPlaceUIWindow;
if( NULL != p_inPlaceUIWindow )
p_inPlaceUIWindow->Release();
}
+
+ if( (NULL == hwndParent) && FAILED(p_inPlaceSite->GetWindow(&hwndParent)) )
+ {
+ p_inPlaceSite->Release();
+ return OLEOBJ_S_INVALIDHWND;
+ }
}
+ else if( NULL == hwndParent )
+ return OLEOBJ_S_INVALIDHWND;
if( FAILED(_p_instance->onActivateInPlace(lpMsg, hwndParent, lprcPosRect, lprcClipRect)) )
- return E_FAIL;
+ {
+ if( NULL != p_inPlaceSite )
+ p_inPlaceSite->Release();
+ return OLEOBJ_S_CANNOT_DOVERB_NOW;
+ }
if( NULL != p_inPlaceSite )
p_inPlaceSite->OnPosRectChange(lprcPosRect);
}
return S_OK;
}
- return E_FAIL;
+ return OLEOBJ_S_CANNOT_DOVERB_NOW;
};
HRESULT VLCOleObject::doUIActivate(LPMSG lpMsg, LPOLECLIENTSITE pActiveSite, HWND hwndParent, LPCRECT lprcPosRect)
if( NULL != _p_clientsite )
_p_clientsite->AddRef();
- *ppClientSite= _p_clientsite;
+ *ppClientSite = _p_clientsite;
return S_OK;
};
STDMETHODIMP VLCOleObject::GetExtent(DWORD dwDrawAspect, SIZEL *pSizel)
{
+ if( NULL == pSizel )
+ return E_POINTER;
+
+ if( dwDrawAspect & DVASPECT_CONTENT )
+ {
+ *pSizel = _p_instance->getExtent();
+ return S_OK;
+ }
+ pSizel->cx= 0L;
+ pSizel->cy= 0L;
return E_NOTIMPL;
};
VariantClear(&v);
}
}
-
_p_clientsite = pClientSite;
+ _p_instance->onClientSiteChanged(pClientSite);
return S_OK;
};
STDMETHODIMP VLCOleObject::SetExtent(DWORD dwDrawAspect, SIZEL *pSizel)
{
+ if( NULL == pSizel )
+ return E_POINTER;
+
+ if( dwDrawAspect & DVASPECT_CONTENT )
+ {
+ _p_instance->setExtent(*pSizel);
+
+ if( _p_instance->isInPlaceActive() )
+ {
+ LPOLEINPLACESITE p_inPlaceSite;
+
+ if( SUCCEEDED(_p_clientsite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
+ {
+ LPOLECONTROLSITE p_controlSite;
+ RECT posRect = _p_instance->getPosRect();
+
+ if( SUCCEEDED(_p_clientsite->QueryInterface(IID_IOleControlSite, (void**)&p_controlSite)) )
+ {
+ // use HIMETRIC to container transform
+ POINTL extent = { pSizel->cx, pSizel->cy };
+ POINTF container;
+ if( SUCCEEDED(p_controlSite->TransformCoords(&extent,
+ &container, XFORMCOORDS_SIZE|XFORMCOORDS_HIMETRICTOCONTAINER)) )
+ {
+ posRect.right = ((LONG)container.x)+posRect.left;
+ posRect.bottom = ((LONG)container.y)+posRect.top;
+ }
+ p_controlSite->Release();
+ }
+ else {
+ // use HIMETRIC to display transform
+ HDC hDC = CreateDevDC(NULL);
+ posRect.right = (pSizel->cx*GetDeviceCaps(hDC, LOGPIXELSX)/2540L)+posRect.left;
+ posRect.bottom = (pSizel->cy*GetDeviceCaps(hDC, LOGPIXELSY)/2540L)+posRect.top;
+ DeleteDC(hDC);
+ }
+ p_inPlaceSite->OnPosRectChange(&posRect);
+ p_inPlaceSite->Release();
+ }
+ }
+ return S_OK;
+ }
return E_NOTIMPL;
};