Для работы с буфером обмена его необходимо отрыть:
BOOL OpenClipboard ( HWND hWndNewOwner // указатель на окно );
После использования закрыть:
BOOL CloseClipboard(VOID);
Обе эти функции возвращают нулевое значение в случае ошибки. Давайте попробуем на примере MFC приложения с диалоговым окном.
И код напишем для кнопок:
void COpenClipboardDlg::OnOpenClipboard() { if (::OpenClipboard(this->m_hWnd)==0) AfxMessageBox("Error Open"); } void COpenClipboardDlg::OnCloseCiplboard() { if (::CloseClipboard()==0) AfxMessageBox("Error Close"); }
Только одно приложение может открыть буфер обмена. В момент открытия буфера он блокируется. Давайте попробуем. Запускаем приложение и нажимаем кнопку Open. А теперь попробуем что-то сделать, например, в Word. Скажем скопировать и вставить текст. Мы получим сообщение об ошибке.
Кстати Word немного странно себя ведет с буфером обмена в плане того, что если другое приложение его блокирует, то через обычное меню все операции с буфером запрещены, в через контекстное меню можно. Ведь такой табличке как Вы вообще быть не должно из-за недоступности пунктов меню. А они могут быть доступны.