Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Буфер обмена с++ 
Author Message
MVV



PostPosted: Sat Apr 24, 2010 14:43    Post subject: Reply with quote

Дык он, бедняжка, один единственный на всю операционку, как можно говорить о разных. Wink
Везде пишут, как открыть, прочитать, закрыть... А тебе нужно еще и следить за изменениями. Вот для этого и нужно подписываться на рассылку уведомления WM_DRAWCLIPBOARD и читать буфер при получении этого уведомления (вот тут и используются эти самые "открыть, прочитать нужный формат, закрыть") - то есть когда система сообщает, что в буфере появилось что-то новенькое - я думал, после прошлого объяснения ты это понял. Smile
Baz wrote:
Это будет кстати - я то собирался вручную по привычке проверять обновление буфера.


Итак, чтобы просто прочитать содержимое буфера, надо вызвать OpenClipboard, проверить, есть ли данные в нужном формате функцией IsClipboardFormatAvailable и получить указатель на данные, вызвав GetClipboardData. Далее как можно быстрее обработать данные и вызывать CloseClipboard.
Чтобы следить за изменениями буфера, нужно подписаться на рассылку уведомления, вызвав (ровно 1 раз) SetClipboardViewer, далее при получении сообщения-уведомления WM_DRAWCLIPBOARD обрабатывать данные и отправлять сообщение следующему окну, следящему за изменениями буфера, с помощью функции SendMessage. Помимо того, обязательно реализовать обработку сообщения WM_CHANGECBCHAIN для корректировки очереди при удалении из нее какого-либо окна, ну и не забыть вызвать ChangeClipboardChain при удалении окна, чтобы удалить свое окно из очереди и не нарушить очередь (иначе окна, ставшие в очередь до твоего, останутся без уведомлений об изменении буфера). Всё это реализовано в примере из моего предыдущего сообщения - просто добавляешь новые варианты в оператор выбора оконной процедуры.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
View user's profile Send private message ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group