クリップボード : Windows クリップボードの使用方法
このトピックでは、 MFC アプリケーション内の標準のペインのクリップボード API を使用する方法について説明します。
ウィンドウのほとんどのアプリケーションは Windows のクリップボードにドロップまたはデータのコピーをとクリップボードからの貼り付けデータ サポートします。クリップボード データ形式は、アプリケーション間で異なります。フレームワークは、クラスの限られた数のクリップボード形式の限られた数のみをサポートします。—ビューの編集] メニューの [通常、クリップボード関連のコマンドを —切り取り、コピー、貼り付け、実行します。クラス ライブラリはこれらのコマンドのコマンド ID を定義します: ID_EDIT_CUT、 ID_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();
}
切り取り、コピー、貼り付けコマンドが特定のコンテキストでのみ有効です。切り取り、コピー コマンドは何かがクリップボードにある場合にのみ、何かが選択されると、貼り付けコマンド必要がある場合にのみ有効にする。コンテキストと、これらのコマンドを有効または無効にする更新ハンドラー関数を定義することで、この動作を提供できます。詳細については、 ユーザーインターフェイス オブジェクトを更新する方法を参照してください。
Microsoft Foundation Class ライブラリには CEdit と CEditView のクラスを編集するテキストをクリップボード サポートします。OLE クラスは、 OLE アイテムを含むクリップボード操作を実行することが簡単になります。OLE クラスの詳細については、 クリップボード: OLE クリップボードの機能を使用するを参照してください。
他の編集] メニュー コマンドを、アンドゥ (ID_EDIT_UNDO)およびやり直し (ID_EDIT_REDO)などの実行すると、およびに、委ねられています。アプリケーションがこれらのコマンドをサポートしない場合は、 Visual C++ リソース エディターを使用して簡単にリソース ファイルから削除できます。