Поделиться через


Буфер обмена. Использование буфер обмена Windows

Этот раздел описывает, как использовать стандартный API буфера обмена windows в рамках приложения MFC.

Большинство приложений для окон поддерживают данные вырезывания или копирования в буфер обмена windows и вставить из буфера обмена.Форматы данных буфера обмена, различаются между приложениями.Границы поддерживают только ограниченное число форматов буфера обмена для ограниченного количества классов.Обычно требуется реализация Буфер обмена-родственные команды — вырезать, копировать и вставить — в меню Правка для представления.Библиотека классов определяет идентификаторы команд для следующих команд: ID_EDIT_CUT, ID_EDIT_COPY и ID_EDIT_PASTE.Их приглашения сообщение-линии также определены.

сообщения и команды в .NET Framework объясняет, как обрабатывать команды меню в приложении путем сопоставления команды меню в функции обработчика.Если приложение не указывает функции обработчика для команд буфера обмена в меню Правка, они остаются отключенный.Для написания функции обработчика для команд вырезать и копий, реализуйте выделение в приложении.Для написания функции обработчика для команд вставить, запросите буфер обмена, чтобы проверить, содержит ли данные в формате, приложение может выполнить.Например, чтобы включить команду копирования, можно написать обработчик какого-либо объекта, например следующим образом:

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 механизм буфера обмена.

Реализация другие командные меню " Правка, как откат (ID_EDIT_UNDO) и повтор (ID_EDIT_REDO), также слева.Если приложение не поддерживает эти команды, можно легко удалять их из файла ресурсов с помощью редакторов ресурсов Visual C++.

Дополнительные сведения

См. также

Основные понятия

буфер обмена