剪貼簿:使用 Windows 剪貼簿
本主題描述如何在 MFC 應用程式中使用標準 Windows 剪貼簿 API。
大部分的 Windows 應用程式都支援剪下或複製資料到 Windows 剪貼簿,以及從剪貼簿貼上資料。 剪貼簿資料格式會因應用程式而異。 此架構僅支援有限數目類別的剪貼簿格式。 您通常會在檢視的 [編輯] 功能表上實作剪貼簿相關命令 —剪下、複製和貼上]。 類別庫會定義這些命令的命令識別碼: ID_EDIT_CUT 、 ID_EDIT_COPY 和 ID_EDIT_PASTE 。 也會定義其訊息行提示。
架構 中的訊息和命令說明如何將功能表命令對應至處理常式函式,以處理應用程式中的功能表命令。 只要您的應用程式未在 [編輯] 功能表上定義剪貼簿命令的處理常式函式,它們就會保持停用狀態。 若要撰寫剪下和複製命令的處理常式函式,請在應用程式中實作選取範圍。 若要撰寫 Paste 命令的處理常式函式,請查詢剪貼簿,以查看其是否包含應用程式可接受格式的資料。 例如,若要啟用 Copy 命令,您可以撰寫類似下列的處理常式:
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();
}
剪下、複製和貼上命令只有在特定內容中才有意義。 只有在選取某個專案時,才應該啟用剪下和複製命令,而只有在剪貼簿中有專案時才啟用 [貼上] 命令。 您可以定義根據內容啟用或停用這些命令的更新處理常式函式來提供此行為。 如需詳細資訊,請參閱 如何更新使用者介面物件 。
Microsoft Foundation Class Library 提供使用 和 CEditView
類別進行文字編輯 CEdit
的剪貼簿支援。 OLE 類別也會簡化實作涉及 OLE 專案的剪貼簿作業。 如需 OLE 類別的詳細資訊,請參閱 剪貼簿:使用 OLE 剪貼簿機制 。
實作其他編輯功能表命令,例如復原( ID_EDIT_UNDO)和重做( ID_EDIT_REDO ),也會留給您。 如果您的應用程式不支援這些命令,您可以使用 Visual C++ 資源編輯器,輕鬆地從資源檔中刪除這些命令。