void CGelView::OnEditCopy() { if ( !OpenClipboard() ) { AfxMessageBox("Cannot Open Clipboard", MB_OK | MB_ICONEXCLAMATION); return; } if ( !EmptyClipboard() ) { AfxMessageBox("Cannot Empty Clipboard", MB_OK | MB_ICONEXCLAMATION); return; } CGenedocDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CMetaFileDC dcMeta; dcMeta.Create(); CDC* pDC = GetDC(); double ypi = pDC->GetDeviceCaps(LOGPIXELSY); double xpi = pDC->GetDeviceCaps(LOGPIXELSX); int x = (int)((double)GetGelSize().cx/100.0 * xpi); int y = (int)((double)GetGelSize().cy/100.0 * ypi); CSize tSize(x,y); pDC->DPtoHIMETRIC(&tSize); dcMeta.SetAttribDC( pDC->m_hAttribDC ); OnPrepareDC( &dcMeta ); DrawGel( &dcMeta, CRect( 0, 0, tSize.cx, tSize.cy ) ); HGLOBAL hMF = GlobalAlloc( GMEM_DDESHARE | GMEM_ZEROINIT | GMEM_MOVEABLE , sizeof(METAFILEPICT) ); METAFILEPICT *pMFP = (METAFILEPICT *)GlobalLock( hMF ); pMFP->mm = MM_ANISOTROPIC; pMFP->xExt = tSize.cx; pMFP->yExt = tSize.cy; HMETAFILE hMeta = dcMeta.Close(); pMFP->hMF = hMeta; GlobalUnlock( hMF ); if ( SetClipboardData(CF_METAFILEPICT, hMF) == NULL ) { AfxMessageBox( "Select Failed in SetClipBoardData", MB_OK | MB_ICONEXCLAMATION ); } // CBitmap // if ( !CloseClipboard() ) { AfxMessageBox( "CloseClipboard Failed", MB_OK | MB_ICONEXCLAMATION ); } ReleaseDC( pDC ); // Moved this down here, needs testing. return; }