Как вы копируете / вставляете данные изображения? - PullRequest
2 голосов
/ 03 июля 2011

Как использовать C ++ и WinAPI, как скопировать данные изображения из предварительно загруженного изображения в буфер обмена?

Ответы [ 2 ]

9 голосов
/ 03 июля 2011

Вам необходимо создать объект, который реализует IDataObject, а затем поместить его в буфер обмена, используя OleSetClipboard.

Когда вы помещаете данные в буфер обмена, у вас есть возможность указать несколько форматов. Это делается для того, чтобы приложение, читающее буфер обмена, могло перечислять форматы и решать, какой из них использовать.

Существует довольно много " стандартных " форматов буфера обмена (с известными постоянными значениями), например ::

  • CF_BITMAP: дескриптор растрового изображения (HBITMAP).
  • CF_DIB: объект памяти, содержащий структуру BITMAPINFO , за которой следуют биты битовой карты.
  • CF_DIBV5: объект памяти, содержащий структуру BITMAPV5HEADER , за которой следуют информация о цветовом пространстве растрового изображения и биты растрового изображения.

Вы также можете зарегистрировать пользовательские форматы, используя RegisterClipboardFormat. Office предоставляет изображения в виде нескольких различных форматов, которые они зарегистрировали, например ::

.
DWORD CF_PNG = RegisterClipboardFormat("PNG");
DWORD CF_JFIF = RegisterClipboardFormat("JFIF");
DWORD CF_GIF = RegisterClipboardFormat("GIF");
DWORD CF_ENHMETAFILE = RegisterClipboardFormat("CF_ENHMETAFILE");
DWORD CF_METAFILEPICT = RegisterClipboardFormat("CF_METAFILEPICT ");
0 голосов
/ 03 июля 2011

Функция EditCopy на этой странице MSDN дает хороший пример того, чего вы хотите достичь:

http://msdn.microsoft.com/en-us/library/ms649016(v=vs.85).aspx

Вам необходимо изменить тип данных с CF_TEXT на CF_BITMAP вчтобы сообщить Windows, что это растровый MIME-тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...