Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym temacie opisano, jak korzystać ze 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. Framework 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 platformie wyjaśnia, jak obsługiwać polecenia menu w aplikacji, mapując polecenie menu na funkcję obsługi. Dopóki aplikacja nie definiuje funkcji obsługi dla poleceń Schowka w menu Edycja, pozostają one 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 How to Update User-Interface Objects (Jak aktualizować obiekty User-Interface).
Biblioteka klas Microsoft Foundation Class Library zapewnia obsługę schowka do edycji tekstu za pomocą klas CEdit i CEditView. Klasy OLE upraszczają również implementowanie operacji Schowka obejmujących elementy OLE. Aby uzyskać więcej informacji na temat klas OLE, patrz Schowek: korzystanie z mechanizmu schowka OLE.
Implementowanie innych poleceń menu Edycja, takich jak Cofnij (ID_EDIT_UNDO) i Powtórz (ID_EDIT_REDO), również pozostaje dla Ciebie. 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++.