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++.