Работа с буфером обмена
От: Караваха Россия  
Дата: 26.08.02 12:01
Оценка:
Привет всем.

Подскажите пожалуйста (или лучше примерчик подкиньте), как можно прочесть из буфера информацию таких форматов, как CF_BITMAP, CF_ENHMETAFILE, CF_METAFILEPICT, CF_PALETTE и некоторых других, сохранить в файл, затем считать из файла и поместить обратно в буфер так, чтобы вернуть все в буфер без потерь?
Просто с текстовыми форматами у меня получается, а с некоторыми другими — нет.
Хотелось бы иметь универсальную функцию для любого формата. Или хотя бы объясните, с какими форматами как нужно работать.

Спасибо.
Re: Работа с буфером обмена
От: Patalog Россия  
Дата: 27.08.02 06:47
Оценка:
Здравствуйте Караваха, Вы писали:

К>Привет всем.


К>Подскажите пожалуйста (или лучше примерчик подкиньте), как можно прочесть из буфера информацию таких форматов, как CF_BITMAP, CF_ENHMETAFILE, CF_METAFILEPICT,


А в чем собст. проблема? Может у тебя затык в том, что GetClipboardData возвращает не хендл области памяти (мдя, некорректно выразился), а хендл битмапа, метафайла и т.д. Т.е. никаких GlobalLock делать не нужно.

Eg.
BOOL res = OpenClipboard();
if(res) {
    CBitmabitmap = reinterpret_cast<HBITMAP>(GetClipboardData(CF_BITMAP));
    
    CDC mem_dc;
    mem_dc.CreateCompatibleDC(&dc);
    CBitmap* old_bmp = mem_dc.SelectObject(CBitmap::FromHandle(bitmap));
        
    dc.BitBlt(50, 50, rc_client.Width(), rc_client.Height(), &mem_dc, 0, 0, SRCCOPY);
    mem_dc.SelectObject(old_bmp);
        
    CloseClipboard();
}


CF_PALETTE и некоторых других, сохранить в файл, затем считать из файла и поместить обратно в буфер так, чтобы вернуть все в буфер без потерь?

Не совсем понял. Ежели без потерь, то накохер такие танцы, ежели можно просто не удалять данные из буфера?

К>Просто с текстовыми форматами у меня получается, а с некоторыми другими — нет.

К>Хотелось бы иметь универсальную функцию для любого формата. Или хотя бы объясните, с какими форматами как нужно работать.

Смотри TFM по поводу Standard Clipboard Formats
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.