MVV

|
Posted: Fri Apr 23, 2010 21:20 Post subject: |
|
|
Ну, слова не такие и умные - под "уведомлением" я подразумевал сообщение WM_DRAWCLIPBOARD, уведомляющее о том, что содержимое буфера обмена изменилось. Далее, согласно справке по функции SetClipboardViewer, эта функция добавляет указанное окно в список окон, которые хотят получать указанное уведомление - этот список я и называл "списком рассылки". При этом функция вернет дескриптор следующего окна (или предыдущего, не важно), которое хочет получать уведомление, и каждое окно при получении этого уведомления должно передавать его по цепочке окну, дескриптор которого вернула функция SetClipboardViewer.
Использование Windows API предполагает использование одинакового набора функций в любой среде разработки, Visual Studio это, MASM32 или Delphi (если в какой-то среде есть свои методы, это уже не Windows API).
Да, в Windows API порой разобраться без поллитры сложно. Я сегодня пробовал открыть буфер обмена и получить текст, но ничего не вышло, каждый раз функция GetClipboardData возвращала 0, а GetLastError - ошибку 1418 ("Буфер обмена для потока команд не открыт. " - кстати, в Visual Studio в меню Инструменты (или Tools) есть пункт Error Lookup - утилита для расшифровки кодов ошибок, которые возвращает GetLastError). Я так и не понял, в чем была причина такого поведения - возможно, в том, что я передавал 0 в качестве окна (ну нету у моего процесса окна, что мне, сидеть без буфера обмена, что ли?). В общем, много видел я нелогичного в Windows API, но работа с буфером обмена - нечто претендующее на призовые места. Рекомендую поискать в инете реальные исходники с примерами работы с буфером обмена (или дизассемблить че-нить ). _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|