void CLeftView::OnEditPaste() { // CG: このブロックはクリップボード アシスタント コンポーネントによって追加されました { if (OpenClipboard()) { HANDLE hData = ::GetClipboardData(m_nClipboardFormat); if (hData != NULL) { CSharedFile memFile; memFile.SetHandle(hData,FALSE); CArchive ar(&memFile, CArchive::load); // データをドキュメントへシリアライズ DoCutCopyPaste(ar, FALSE); ar.Close(); memFile.Detach(); } else AfxMessageBox(CG_IDS_CANNOT_GET_CLIPBOARD_DATA); CloseClipboard(); } else AfxMessageBox(CG_IDS_CANNOT_OPEN_CLIPBOARD); } }
/* CPBaseDataSource method that reads the serialized data from the memory file specified by <p hData. @rdesc The list of objects serialized out of the memory file. @devnote The list returned has been dynamically allocated and it is the responsibility of the caller to free its memory. */ CFrogOleDataList * CPBaseDataSource::DeSerialize( HANDLE hData ) // @parm A handle to a memory file containing the data. { // associate global memory handle with shared memory file CSharedFile mf; mf.SetHandle(hData); CFrogOleDataList *pList = NULL; TRY { // read from shared memory file into object list CArchive ar (&mf, CArchive::load); pList = new CFrogOleDataList; pList->Serialize (ar); // disconnect archive from shared memory file ar.Close(); } CATCH(CArchiveException, archExcept) { CBExceptionReporter::ArchiveException(archExcept); delete pList; pList = NULL; }
void CSimpleReport::Paste() { if (IsVirtualMode()) return; CWaitCursor _WC; CLIPFORMAT uCF_Records = (CLIPFORMAT)::RegisterClipboardFormat(XTPREPORTCTRL_CF_RECORDS); CXTPReportRecords arRecords; BOOL bTryPasteFromText = TRUE; // Retrieve text from the clipboard if (!OpenClipboard()) return; if (::IsClipboardFormatAvailable(uCF_Records)) { HGLOBAL hPasteData = ::GetClipboardData(uCF_Records); if (hPasteData) { bTryPasteFromText = FALSE; const int cErrTextSize = 1024; TCHAR szErrText[cErrTextSize + 1]; CSharedFile fileSahred; fileSahred.SetHandle(hPasteData, FALSE); CArchive ar(&fileSahred, CArchive::load); try { CXTPPropExchangeArchive px(ar); BOOL bread = FALSE; #if _XTPLIB_VERSION_PREFIX == 1502 bread = _ReadRecordsFromData(&px, arRecords); #else bread = _ReadRecodsFromData(&px, arRecords); #endif if (!bread) { arRecords.RemoveAll(); } } catch(CArchiveException* pE) { if (pE->GetErrorMessage(szErrText, cErrTextSize)) { TRACE(_T("EXCEPTION: CXTPReportControl::Paste() - %s\n"), szErrText); } pE->Delete(); } catch(CFileException* pE) { if (pE->GetErrorMessage(szErrText, cErrTextSize)) { TRACE(_T("EXCEPTION: CXTPReportControl::Paste() - %s\n"), szErrText); } pE->Delete(); } catch(...) { TRACE(_T("EXCEPTION: CXTPReportControl::Paste() - Unhandled Exception!\n")); } //********* ar.Close(); // detach from file fileSahred.Detach(); //detach from data ::GlobalUnlock(hPasteData); // unlock data } } UINT uCF_TText = sizeof(TCHAR) == 2 ? CF_UNICODETEXT : CF_TEXT; if (bTryPasteFromText && ::IsClipboardFormatAvailable(uCF_TText)) { // Try to get text data from the clipboard HGLOBAL hglbPaste = ::GetClipboardData(uCF_TText); // Import Text data into the control if (hglbPaste != NULL) { TCHAR* lpszClipboard = (TCHAR*)GlobalLock(hglbPaste); BOOL bRead = FALSE; #if _XTPLIB_VERSION_PREFIX == 1502 bRead = _ReadRecordsFromText(lpszClipboard, arRecords); #else bRead = _ReadRecodsFromText(lpszClipboard, arRecords); #endif if (!bRead) { arRecords.RemoveAll(); } ::GlobalUnlock(hglbPaste); } } ::CloseClipboard(); ////////////////////////////////////////////////////////////////////////// CUpdateContext updateContext(this); // Add and Populate records CXTPReportRow* pRow = GetFocusedRow(); if (pRow == NULL) return; int n = pRow->GetRecord()->GetIndex(); int nRecordsCount = arRecords.GetCount(); if (nRecordsCount > 0) { for (int i = nRecordsCount - 1; i >= 0; i--) { CXTPReportRecord* pRecord = arRecords.GetAt(i); if (pRecord) { CMDTARGET_ADDREF(pRecord); if (m_bAdd) GetRecords()->Add(arRecords.GetAt(i)); else GetRecords()->InsertAt(n, arRecords.GetAt(i)); } } Populate(); _SelectRows(&arRecords); } m_bAdd = false; }