Esempio n. 1
0
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;

}