剪貼簿: 使用

本主題說明如何使用標準的 Windows 剪貼簿 API 在 MFC 應用程式中。

大部分的應用程式視窗支援剪下或複製資料到 Windows 剪貼簿],從 [剪貼簿] 貼上資料。剪貼簿資料格式是根據應用程式而異。架構支援少數類別只有有限的數量的剪貼簿格式。您通常會實作剪貼簿相關的指令 — 剪下、 複製及貼上,檢視 [編輯] 功能表。此類別庫會定義這些命令的命令 Id: ID_EDIT_CUTid_edit_copy 的命令是,以及 ID_EDIT_PASTE。也會定義其訊息行提示。

訊息和命令在架構中解釋如何藉由對應的功能表命令的處理函式來處理應用程式中的功能表命令。您的應用程式不會定義在 [編輯] 功能表上的 [剪貼簿] 命令的處理函式,因為它們都已停用。若要編寫 [剪下和複製] 命令的處理函式,實作應用程式中的選取項目。若要撰寫貼上] 命令的處理常式函式,查詢 [剪貼簿],以查看是否包含在您的應用程式可以接受的格式中的資料。比方說,若要啟用 [複製] 命令,您可以撰寫處理常式如下所示的項目:

void CMyListView::OnEditCopy()
{
   if ( !OpenClipboard() )
   {
      AfxMessageBox( _T("Cannot open the Clipboard") );
      return;
   }
   // Remove the current Clipboard contents
   if( !EmptyClipboard() )
   {
      AfxMessageBox( _T("Cannot empty the Clipboard") );
      return;
   }
   // Get the currently selected data
   HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, 64);
   strcpy_s((char*)hGlob, 64, "Current selection\r\n");
   // For the appropriate data formats...
   if ( ::SetClipboardData( CF_TEXT, hGlob ) == NULL )
   {
      CString msg;
      msg.Format(_T("Unable to set Clipboard data, error: %d"), GetLastError());
      AfxMessageBox( msg );
      CloseClipboard();
      GlobalFree(hGlob);
      return;
   }
   CloseClipboard();
}

[剪下、 複製及貼上] 命令時,才對某些內容作用。項目已選取,然後貼上] 指令時,才是處於 [剪貼簿] 時,才應該啟用 [剪下和複製] 命令。您可以藉由定義啟用或停用內容而定,這些命令更新處理函式來提供這項行為。如需詳細資訊,請參閱如何更新使用者介面物件

Mfc 程式庫不會提供剪貼簿支援文字編輯與CEditCEditView類別。OLE 類別也會簡化實作的剪貼簿作業牽涉到 OLE 項目。如需有關 OLE 類別的詳細資訊,請參閱剪貼簿: 使用 OLE 剪貼簿機制

實作其他編輯功能表命令,例如 [復原 (ID_EDIT_UNDO) 與 [取消復原 (ID_EDIT_REDO),同時保留給您。如果您的應用程式不支援這些命令,可以輕易地將它們刪除您使用 Visual C++ 資源編輯器進行編輯的資源檔中。

您還想知道關於哪些方面的詳細資訊?

請參閱

概念

剪貼簿