Exemplo n.º 1
0
static void IOCS_OnSize( IOCS* This, LPCRECT rect )
{
    SIZEL inPix, inHi;

    This->size.left = rect->left; This->size.right = rect->right; This->size.top = rect->top; This->size.bottom = rect->bottom;

    if ( !This->control )
        return;

    inPix.cx = rect->right - rect->left;
    inPix.cy = rect->bottom - rect->top;
    AtlPixelToHiMetric( &inPix, &inHi );
    IOleObject_SetExtent( This->control, DVASPECT_CONTENT, &inHi );

    if ( This->fInPlace )
    {
        IOleInPlaceObject *wl;

        if ( SUCCEEDED( IOleObject_QueryInterface( This->control, &IID_IOleInPlaceObject, (void**)&wl ) ) )
        {
            IOleInPlaceObject_SetObjectRects( wl, rect, rect );
            IOleInPlaceObject_Release( wl );
        }
    }
}
void CWebBrowserCore::ChangeSize(int left, int top, int width, int height)
{
	if (m_pOleInPlaceWindowLess)
	{
		SIZE sz = { width, height };
		SIZE sz2;
		AtlPixelToHiMetric(&sz, &sz2);
		m_pOleObject->SetExtent(DVASPECT_CONTENT, &sz2);

		RECT rc = { left, top, left + width, top + height };
		m_pOleInPlaceWindowLess->SetObjectRects(&rc, &rc);
	}
}
Exemplo n.º 3
0
HRESULT CGifSmileyCtrl::LoadFromFileSized(BSTR bstrFileName,INT nWidth,INT nHeight)
{
	m_strFilename = bstrFileName;
	if ( _gdiPlusFail ) return E_FAIL;
	UnloadImage();
	ATL::CString sFilename(bstrFileName);
	ImageItem * foundImage=NULL;
	LISTIMAGES::iterator it=_listImages.begin();
	while (it!=_listImages.end())
	{
		if ((*it) && (*it)->IsEqual(sFilename,nHeight))
		{
			foundImage=(*it);
			break;
		}
		++it;
	}
	if (!foundImage)
	{
		foundImage=new ImageItem;
		_listImages.push_back(foundImage);
	}

	if (foundImage)
	{
		m_pGifImage=foundImage->LoadImageFromFile(sFilename,nWidth,nHeight);
		m_pDelays=foundImage->GetFrameDelays();
		m_nFrameCount=foundImage->GetFrameCount();
		m_nFrameSize=foundImage->GetFrameSize();
		if (m_nFrameSize.Width==0 || m_nFrameSize.Height==0)
		{
			UnloadImage();
			return E_FAIL;
		}
		SIZEL size;
		size.cx=m_nFrameSize.Width+2;
		size.cy=m_nFrameSize.Height;
		AtlPixelToHiMetric(&size,&m_sizeExtent);
		return S_OK;
	}
	return E_FAIL;    
} 
void CExRichEditWindowless::InsertGif(LONG gif)
{
	CComQIPtr<IDynamicOleCom> spDyn;
	HRESULT hr = spDyn.CoCreateInstance(STR_PROGID);
	if(SUCCEEDED(hr))
	{
		LPOLEOBJECT lpOleObject = NULL;
		HRESULT hr = spDyn->QueryInterface(IID_IOleObject, (void**)&lpOleObject);

		IUnknownPtr lpUnk = lpOleObject;
		hr = lpUnk->QueryInterface(IID_IOleObject, (LPVOID*)&lpOleObject);
		if (lpOleObject == NULL)
			throw(E_OUTOFMEMORY);
		//hr = lpOleObject->SetClientSite( static_cast<IOleClientSite *>( this ) );
		IViewObject2Ptr lpViewObject;// IViewObject for IOleObject above
		hr = lpOleObject->QueryInterface(IID_IViewObject2, (LPVOID*)&lpViewObject);
		if (hr != S_OK)
		{
			AtlThrow(hr);
		}
		IRichEditOle* pRichEditOle = GetIRichEditOle();
		////获取RichEdit的OLEClientSite
		IOleClientSitePtr lpClientSite;
		hr = pRichEditOle->GetClientSite(&lpClientSite);

		if (hr != S_OK)
		{
			AtlThrow(hr);
		}
		REOBJECT reobject;
		ZeroMemory(&reobject,sizeof(REOBJECT));
		reobject.cbStruct = sizeof(REOBJECT);

		CLSID clsid;
		hr = lpOleObject->GetUserClassID(&clsid);
		if (hr != S_OK)
		{
			AtlThrow(hr);
		}

		reobject.clsid = clsid;
		reobject.cp = -1;
		//reobject.cp = REO_CP_SELECTION;
		reobject.dvaspect = DVASPECT_CONTENT;//DVASPECT_OPAQUE;
		reobject.poleobj = lpOleObject;
		reobject.polesite = lpClientSite;
		//reobject.pstg = lpStorage;
		SIZEL sizel;
		sizel.cx = sizel.cy = 0; // let richedit determine initial size

		Image* img = (Image*)gif;
		SIZEL sizeInPix = {img->GetWidth(), img->GetHeight()};
		SIZEL sizeInHiMetric;
		AtlPixelToHiMetric(&sizeInPix, &sizeInHiMetric);

		reobject.sizel = sizeInHiMetric;
		reobject.dwFlags = REO_BELOWBASELINE|REO_STATIC;//REO_RESIZABLE

		CExRichEditData* pdata = new CExRichEditData;
		pdata->m_dataType = GIF;
		pdata->m_data = (void*)gif;
		reobject.dwUser = (DWORD)pdata;//TODO 用户数据

		lpOleObject->SetClientSite(lpClientSite); 
		hr = pRichEditOle->InsertObject(&reobject);
		lpOleObject->SetExtent(DVASPECT_CONTENT, &sizeInHiMetric);
		OleSetContainedObject(lpOleObject, TRUE);
		lpOleObject->Release();
		spDyn->SetHostWindow((LONG)hwndParent);
		spDyn->InsertGif(gif);
	}
}
Exemplo n.º 5
0
HRESULT CXcpControlHost::ActivateXcpControl(IUnknown* pUnKnown) 
{
    if (pUnKnown == NULL)
	{
        return S_OK;
    }

    m_spUnknown = pUnKnown;

    HRESULT hr = S_OK;
    pUnKnown->QueryInterface(__uuidof(IOleObject), (void**)&m_spOleObject);
    if (m_spOleObject) 
	{
        //m_spOleObject->GetMiscStatus(DVASPECT_CONTENT, &m_dwMiscStatus);
		OleRegGetMiscStatus( __uuidof(m_spOleObject), DVASPECT_CONTENT, &m_dwMiscStatus );
        if (m_dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST) 
		{
            //CComQIPtr<IOleClientSite> spClientSite(GetControllingUnknown());
			IOleClientSite	*spClientSite = NULL;
			((ATL::CAxHostWindow *)this)->QueryInterface( __uuidof(IOleClientSite), (void **)&spClientSite );
			if( NULL != spClientSite )
			{
				m_spOleObject->SetClientSite(spClientSite);
				spClientSite->Release();
			}
        }

        //CComQIPtr<IPersistPropertyBag> pPersist(m_spOleObject);
		IPersistPropertyBag	*pPersist = NULL;
		m_spOleObject->QueryInterface( __uuidof(IPersistPropertyBag), (void **)&pPersist );

        if ( NULL != pPersist ) 
		{
            IPropertyBag* pPropBag = (IPropertyBag*)new CXcpPropertyBag();
            pPropBag->AddRef();

            pPersist->Load((IPropertyBag*)pPropBag, NULL);
            pPropBag->Release();
        }

        if (0 == (m_dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST)) 
		{
            //CComQIPtr<IOleClientSite> spClientSite(GetControllingUnknown());
			IOleClientSite	*spClientSite = NULL;
			((ATL::CAxHostWindow *)this)->QueryInterface(  __uuidof(IOleClientSite), (void **)&spClientSite);
			//GetControllingUnknown()->QueryInterface( __uuidof(IOleClientSite), (void **)&spClientSite );
			if( NULL != spClientSite )
			{
				m_spOleObject->SetClientSite(spClientSite);
				spClientSite->Release();
			}
        }

        m_dwViewObjectType = 0;
        hr = m_spOleObject->QueryInterface(__uuidof(IViewObjectEx), (void**) &m_spViewObject);
        if (FAILED(hr)) 
		{
            hr = m_spOleObject->QueryInterface(__uuidof(IViewObject2), (void**) &m_spViewObject);
            if (SUCCEEDED(hr))
			{
                m_dwViewObjectType = 3;
            }
        }
        else
		{
            m_dwViewObjectType = 7;
        }

        if (FAILED(hr)) 
		{
            hr = m_spOleObject->QueryInterface(__uuidof(IViewObject), (void**) &m_spViewObject);
            if (SUCCEEDED(hr))
			{
                m_dwViewObjectType = 1;
			}
        }

        //CComQIPtr<IAdviseSink> spAdviseSink(GetControllingUnknown());
		IAdviseSink *spAdviseSink = NULL;
		//GetControllingUnknown()->QueryInterface( __uuidof(IAdviseSink), (void **)&spAdviseSink );
		((ATL::CAxHostWindow *)this)->QueryInterface( __uuidof(IAdviseSink), (void **)&spAdviseSink );
		if( NULL != spAdviseSink )
		{
			m_spOleObject->Advise(spAdviseSink, &m_dwOleObject);
			if (m_spViewObject) 
			{
				m_spViewObject->SetAdvise(DVASPECT_CONTENT, 0, spAdviseSink);
			}
			spAdviseSink->Release();
		}

        m_spOleObject->SetHostNames(OLESTR("AXWIN"), NULL);

        if ((m_dwMiscStatus & OLEMISC_INVISIBLEATRUNTIME) == 0) 
		{
			m_spOleObject->GetExtent( DVASPECT_CONTENT, &m_hmSize );
            m_pxSize.cx =  m_rcPos.right - m_rcPos.left;
            m_pxSize.cy =  m_rcPos.bottom - m_rcPos.top;
            AtlPixelToHiMetric(&m_pxSize, &m_hmSize);
            m_spOleObject->SetExtent(DVASPECT_CONTENT, &m_hmSize);
            m_spOleObject->GetExtent(DVASPECT_CONTENT, &m_hmSize);
            AtlHiMetricToPixel(&m_hmSize, &m_pxSize);
            m_rcPos.right = m_rcPos.left + m_pxSize.cx ;
            m_rcPos.bottom = m_rcPos.top + m_pxSize.cy ;
            //CComQIPtr<IOleClientSite> spClientSite(GetControllingUnknown());
			IOleClientSite *spClientSite = NULL;
			//GetControllingUnknown()->QueryInterface( __uuidof(IOleClientSite), (void **)&spClientSite );
			((ATL::CAxHostWindow *)this)->QueryInterface( __uuidof(IOleClientSite), (void **)&spClientSite );
			if( NULL != spClientSite )
			{
				m_rcPos.left = m_rcPos.top = 0;
				m_rcPos.right = m_hmSize.cx;
				m_rcPos.bottom = m_hmSize.cy;
				hr = m_spOleObject->DoVerb( OLEIVERB_INPLACEACTIVATE, NULL, spClientSite, 0, m_hWnd, &m_rcPos );
				::RedrawWindow( m_hWnd, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_INTERNALPAINT | RDW_FRAME );
				spClientSite->Release();
			}
        }
		if( NULL != pPersist )
		{
			pPersist->Release();
		}
    }

    //CComPtr<IObjectWithSite> spSite;
	IObjectWithSite		*spSite = NULL;
    pUnKnown->QueryInterface(__uuidof(IObjectWithSite), (void**)&spSite);
    if ( NULL != spSite ) 
	{
//        spSite->SetSite(GetControllingUnknown());
		IUnknown *iUnknown = NULL;
		((ATL::CAxHostWindow *)this)->QueryInterface( __uuidof(IUnknown), (void **)&iUnknown );
		spSite->SetSite( iUnknown );
		spSite->Release();
    }

    return hr;
}