クリップボード : Windows クリップボードの使用方法

このトピックでは、MFC アプリケーション内で標準の Windows クリップボード API を使用する方法について説明します。

Windows 用のほとんどのアプリケーションでは、Windows クリップボードへのデータの切り取りまたはコピー、およびクリップボードからのデータの貼り付けがサポートされています。 クリップボードのデータ形式は、アプリケーションによって異なります。 フレームワークは、限られた数のクラスに対して、限られた数のクリップボード形式のみをサポートしています。 通常は、クリップボード関連のコマンドを実装して、 —— ビューの [編集] メニューに切り取り、コピー、貼り付けを行います。 クラスライブラリでは、これらのコマンドのコマンド Id ( ID_EDIT_CUTID_EDIT_COPY、および ID_EDIT_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();
}

切り取り、コピー、貼り付けの各コマンドは、特定のコンテキストでのみ意味があります。 切り取りコマンドとコピーコマンドは、何かが選択されている場合にのみ有効にし、クリップボードに何かがある場合にのみ貼り付けコマンドを有効にする必要があります。 コンテキストに応じてこれらのコマンドを有効または無効にする更新ハンドラー関数を定義することで、この動作を提供できます。 詳細については、「 How To Update User-Interface Objects」を参照してください。

Microsoft Foundation Class ライブラリには、およびクラスを使用したテキスト編集のためのクリップボードサポートが用意されて CEditCEditView います。 Ole クラスでは、OLE アイテムに関連するクリップボード操作の実装も簡略化されます。 OLE クラスの詳細については、「 クリップボード: Ole クリップボード機構の使用」を参照してください。

他の編集メニューコマンド (元に戻す (ID_EDIT_UNDO) ややり直し (ID_EDIT_REDO) など) を実装することもお勧めします。 アプリケーションでこれらのコマンドがサポートされていない場合は、Visual C++ リソースエディターを使用してリソースファイルから簡単に削除できます。

詳細については、次を参照してください。

関連項目

クリップボード