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; }