Буфер обмена. Использование буфер обмена 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++.