Посмотрим, что у нас в clipboard.
Автор: Michael Dunn
- Скачать исходник - 45 Kb
Рис. 1: ClipSpy показывает, что Word 97 положил в clipboard
после простой операции копирования.
Рис. 2: ClipSpy показывает содержимое clipboard , если в
Word что-нибудь перетащить.
Программка ClipSpy работает через MFC класс COleDataObject
, который включает интерфейс IDataObject , и
обеспечивает доступ к содержимому clipboard. Функция CLeftView::ReadDataAndFillList()
отслеживает форматы данных в clipboard и заполняет
ими список:
BOOL CLeftView::ReadDataAndFillList ( COleDataObject* pDO )
{
FORMATETC etc;
UINT uNumFormats = 0;
// определяем, сколько форматов данных доступно в clipboard.
pDO->BeginEnumFormats();
while ( pDO->GetNextFormat ( &etc ))
{
if ( pDO->IsDataAvailable ( etc.cfFormat ))
{
uNumFormats++;
}
}
ClipSpy проверяет, является ли каждый формат
данных встроенным. Если нет, то вызывается
функция GetClipboardFormatName() для получения
названия формата:
TCHAR szFormat [256];
GetClipboardFormatName ( etc.cfFormat, szFormat, 256 );
Затем ClipSpy считывает данные из формата:
HGLOBAL hgData;
UINT uDataSize;
CClipSpyDoc* pDoc = GetDocument();
// Получаем HGLOBAL данных.
hgData = pDO->GetGlobalData ( etc.cfFormat );
if ( NULL != hgData )
{
uDataSize = GlobalSize ( hgData );
pDoc->AddDataBlock ( hgData, uDataSize );
}
else
{
pDoc->AddEmptyBlock();
}
Функции AddDataBlock() и AddEmptyBlock() это
члены класса Документ, которые сохраняют копии
данных.
Следующий интересный момент, это CLeftView::OnItemchanged()
и CClipSpyView::OnUpdate() . Первая функция определяет
изменения и соответственно вызывает функцию UpdateAllViews() ,
которая в свою очередь вызывает OnUpdate() . OnUpdate()
заполняет правый rich edit данными.
|