Udostępnij za pośrednictwem


Schowek: korzystanie ze schowka systemu Windows

W tym temacie opisano sposób używania standardowego interfejsu API schowka systemu Windows w aplikacji MFC.

Większość aplikacji dla systemu Windows obsługuje wycinanie lub kopiowanie danych do Schowka systemu Windows i wklejanie danych ze Schowka. Formaty danych Schowka różnią się w zależności od aplikacji. Platforma obsługuje tylko ograniczoną liczbę formatów Schowka dla ograniczonej liczby klas. Zwykle implementujesz polecenia związane ze schowkami — wycinanie, kopiowanie i wklejanie — w menu Edycja dla widoku. Biblioteka klas definiuje identyfikatory poleceń dla tych poleceń: ID_EDIT_CUT, ID_EDIT_COPY i ID_EDIT_PASTE. Ich wiersze komunikatów są również zdefiniowane.

Komunikaty i polecenia w strukturze wyjaśnia, jak obsługiwać polecenia menu w aplikacji, mapując polecenie menu na funkcję obsługi. Jeśli aplikacja nie definiuje funkcji obsługi dla poleceń Schowka w menu Edycja, pozostają wyłączone. Aby napisać funkcje obsługi dla poleceń wycinania i kopiowania, zaimplementuj wybór w aplikacji. Aby napisać funkcję obsługi dla polecenia Wklej, wyślij zapytanie do Schowka, aby sprawdzić, czy zawiera dane w formacie, który może zaakceptować aplikacja. Aby na przykład włączyć polecenie Copy, możesz napisać procedurę obsługi podobną do następującej:

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();
}

Polecenia wycinania, kopiowania i wklejania mają znaczenie tylko w niektórych kontekstach. Polecenia Wycinanie i kopiowanie powinny być włączone tylko wtedy, gdy coś jest zaznaczone, a polecenie Wklej tylko wtedy, gdy coś znajduje się w Schowku. To zachowanie można zapewnić, definiując funkcje obsługi aktualizacji, które włączają lub wyłączają te polecenia w zależności od kontekstu. Aby uzyskać więcej informacji, zobacz Jak zaktualizować obiekty interfejsu użytkownika.

Biblioteka klas programu Microsoft Foundation zapewnia obsługę schowka do edycji tekstu przy użyciu CEdit klas i CEditView . Klasy OLE upraszczają również implementowanie operacji Schowka obejmujących elementy OLE. Aby uzyskać więcej informacji na temat klas OLE, zobacz Schowek: korzystanie z mechanizmu schowka OLE.

Implementacja innych poleceń menu Edycja, takich jak Cofnij (ID_EDIT_UNDO) i Wykonaj ponownie (ID_EDIT_REDO), jest również pozostawiona. Jeśli aplikacja nie obsługuje tych poleceń, można je łatwo usunąć z pliku zasobów przy użyciu edytorów zasobów Visual C++.

Co chcesz dowiedzieć się więcej o

Zobacz też

Schowek