Пример #1
0
// @pymethod |PyIOleObject|GetClientSite|Description of GetClientSite.
PyObject *PyIOleObject::GetClientSite(PyObject *self, PyObject *args)
{
	IOleObject *pIOO = GetI(self);
	if ( pIOO == NULL )
		return NULL;
	IOleClientSite * ppClientSite;
	if ( !PyArg_ParseTuple(args, ":GetClientSite") )
		return NULL;
	HRESULT hr;
	PY_INTERFACE_PRECALL;
	hr = pIOO->GetClientSite( &ppClientSite );
	PY_INTERFACE_POSTCALL;

	if ( FAILED(hr) )
		return OleSetOleError(hr);
	return PyCom_PyObjectFromIUnknown(ppClientSite, IID_IOleClientSite, FALSE);
}
Пример #2
0
bool CGifSmileyCtrl::CopySmile( long hwndHostWindow, BSTR bstrFileName, OLE_COLOR clr, INT cy)
{
	COLORREF backColor = (COLORREF)(clr);
	HWND hwnd = (HWND)(hwndHostWindow);
	HRESULT hr; 

	LPOLECLIENTSITE pOleSite;
	LPOLEOBJECT	lpObject=NULL;
	LPLOCKBYTES lpLockBytes = NULL;  

	// retrieve OLE interface for richedit  

	try
	{ 

		IOleObject *lpOleObject = NULL;    //OLE object
		QueryInterface(IID_IOleObject,(void**)&lpOleObject); 
		lpOleObject->GetClientSite(&pOleSite);

		//Load the gif
		LoadFromFileSized(bstrFileName, 0,cy);

		//Set back color
		OLE_COLOR oleBackColor=(OLE_COLOR)backColor;
		m_clrBackColor = oleBackColor;
		put_BackColor(oleBackColor);
		//myObject->put_BackColor(oleBackColor);

		//get the IOleObject
		hr = QueryInterface(IID_IOleObject, (void**)&lpObject);
		if (FAILED(hr))
		{
			return	 false;
		}

		//to insert into richedit, you need a struct of REOBJECT
		REOBJECT reobject;
		ZeroMemory(&reobject, sizeof(REOBJECT));

		reobject.cbStruct = sizeof(REOBJECT);	

		CLSID clsid;
		hr =  lpObject->GetUserClassID(&clsid);


		//set clsid
		reobject.clsid = clsid;
		//can be selected
		reobject.cp = REO_CP_SELECTION;
		//content, but not static
		reobject.dvaspect = DVASPECT_CONTENT;
		//goes in the same line of text line
		reobject.dwFlags = REO_BELOWBASELINE;
		reobject.dwUser = (DWORD)this;
		//the very object
		reobject.poleobj = lpObject;
		//client site contain the object
		reobject.polesite = pOleSite;
		//the storage 
		reobject.pstg = NULL;

		SIZEL sizel={0};
		reobject.sizel = sizel; 
		hr = SetHostWindow((long)hwnd, 0);

		//ole->InsertObject(&reobject);

		//redraw the window to show animation
		::RedrawWindow(hwnd,NULL, NULL, RDW_INVALIDATE);

		if (pOleSite)
		{
			pOleSite->Release();
			pOleSite = NULL;
		}
		if (lpObject)
		{
			lpObject->Release();
			lpObject = NULL;
		} 
	}
	catch( ... )
	{
		if (pOleSite)
		{
			pOleSite->Release();
			pOleSite = NULL;
		}
		if (lpObject)
		{
			lpObject->Release();
			lpObject = NULL;
		} 
		return FALSE;
	}
	return S_OK;
}