Esempio n. 1
0
BOOL CMSOffice2007DemoView::InsertBitmap(UINT uiBmpResID)
{
	CWaitCursor wait;

	CBitmap bmp;
	if (!bmp.LoadBitmap(uiBmpResID))
	{
		return FALSE;
	}

	std::auto_ptr<COleDataSource> apDataSrc(new COleDataSource);
	std::auto_ptr<COleDataObject> apData(new COleDataObject);

	TRY
	{
		STGMEDIUM stgm;
		stgm.hGlobal = bmp.GetSafeHandle();
		stgm.tymed = TYMED_GDI;
		stgm.pUnkForRelease = NULL;

		apDataSrc->CacheData(CF_BITMAP, &stgm);

		LPDATAOBJECT lpdata;

		if (FAILED(apDataSrc->m_xDataObject.QueryInterface(IID_IDataObject,
			(LPVOID FAR*) &lpdata)))
		{
			AfxThrowUserException();
		}

		apData->Attach(lpdata);
		lpdata->Release();

		CMSOffice2007DemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);

		std::auto_ptr<CMSOffice2007DemoCntrItem> apItem(new CMSOffice2007DemoCntrItem(NULL, pDoc));
		ASSERT_VALID(apItem.get());

		if (!apItem->CreateStaticFromData(apData.release()))
		{
			AfxThrowUserException();
		}

		apItem->m_uiCategoryID = uiBmpResID;
		InsertItem(apItem.release());

		pDoc->UpdateAllViews(this);
	}
	CATCH(CException, e)
	{
		return FALSE;
	}
	END_CATCH

	CMainFrame* pMainFrame = ((CMainFrame*) GetTopLevelFrame());
	ASSERT_VALID(pMainFrame);

	pMainFrame->ActivateRibbonContextCategory(uiBmpResID);

	return TRUE;
}
BOOL CBCGPMSOffice2007DemoView::InsertBitmap (UINT uiBmpResID)
{
	CWaitCursor wait;

	CBitmap bmp;
	if (!bmp.LoadBitmap(uiBmpResID))
	{
		return FALSE;
	}
	
	COleDataSource* pDataSrc = new COleDataSource;
	COleDataObject* pData = new COleDataObject;
	
	CBCGPMSOffice2007DemoCntrItem* pItem = NULL;
	
	TRY
	{
		WPD_CHARFORMAT cf = GetCharFormatSelection();

		STGMEDIUM stgm;
		stgm.hGlobal = bmp.GetSafeHandle();
		stgm.tymed = TYMED_GDI;
		stgm.pUnkForRelease = NULL;

		pDataSrc->CacheData (CF_BITMAP, &stgm);
		
		LPDATAOBJECT lpdata;

		if (FAILED (pDataSrc->m_xDataObject.QueryInterface (IID_IDataObject,
			(LPVOID FAR*) &lpdata)))
		{
			AfxThrowUserException();
		}
		
		pData->Attach (lpdata);
		
		CBCGPMSOffice2007DemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);

		pItem = new CBCGPMSOffice2007DemoCntrItem (NULL, pDoc);
		ASSERT_VALID(pItem);

		if (!pItem->CreateStaticFromData (pData))
		{
			AfxThrowUserException();
		}
		
		pItem->m_uiCategoryID = uiBmpResID;
		InsertItem (pItem);

		pDoc->UpdateAllViews (this);

		SetCharFormat (cf);
		SyncFont ();
	}
	CATCH(CException, e)
	{
		if (pItem != NULL)
		{
			ASSERT_VALID(pItem);
			pItem->Delete ();
		}

		delete pData;
		delete pDataSrc;

		return FALSE;
	}
	END_CATCH

	delete pData;
	delete pDataSrc;

	CMainFrame* pMainFrame = ((CMainFrame*) GetTopLevelFrame ());
	ASSERT_VALID (pMainFrame);

	pMainFrame->ActivateRibbonContextCategory (uiBmpResID);

	return TRUE;
}