MVV

|
Posted: Sat Apr 24, 2010 14:43 Post subject: |
|
|
Дык он, бедняжка, один единственный на всю операционку, как можно говорить о разных.
Везде пишут, как открыть, прочитать, закрыть... А тебе нужно еще и следить за изменениями. Вот для этого и нужно подписываться на рассылку уведомления WM_DRAWCLIPBOARD и читать буфер при получении этого уведомления (вот тут и используются эти самые "открыть, прочитать нужный формат, закрыть") - то есть когда система сообщает, что в буфере появилось что-то новенькое - я думал, после прошлого объяснения ты это понял.
Baz wrote: | Это будет кстати - я то собирался вручную по привычке проверять обновление буфера. |
Итак, чтобы просто прочитать содержимое буфера, надо вызвать OpenClipboard, проверить, есть ли данные в нужном формате функцией IsClipboardFormatAvailable и получить указатель на данные, вызвав GetClipboardData. Далее как можно быстрее обработать данные и вызывать CloseClipboard.
Чтобы следить за изменениями буфера, нужно подписаться на рассылку уведомления, вызвав (ровно 1 раз) SetClipboardViewer, далее при получении сообщения-уведомления WM_DRAWCLIPBOARD обрабатывать данные и отправлять сообщение следующему окну, следящему за изменениями буфера, с помощью функции SendMessage. Помимо того, обязательно реализовать обработку сообщения WM_CHANGECBCHAIN для корректировки очереди при удалении из нее какого-либо окна, ну и не забыть вызвать ChangeClipboardChain при удалении окна, чтобы удалить свое окно из очереди и не нарушить очередь (иначе окна, ставшие в очередь до твоего, останутся без уведомлений об изменении буфера). Всё это реализовано в примере из моего предыдущего сообщения - просто добавляешь новые варианты в оператор выбора оконной процедуры. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|