注册 登录
编程论坛 C++教室

关于复制Gif多帧图片文件

linan03 发布于 2015-10-10 10:56, 1247 次点击
通过代码把一个gif文件复制到剪切板上。
然后在QQ对话框中 手动黏贴 能直接把动图显示在 编辑框中,发送后动图也是直接显示在QQ对话框中。 (不是发送文件哦)

目前只发现360浏览器的复制功能有这个效果。不知道剪切板中的存储格式是怎样的。
哪位大神有这方面的资料吗?
7 回复
#2
rjsp2015-10-10 12:15
跟剪切板无关,只跟接受粘贴内容的程序有关,它想怎么处理就怎么处理

剪切板的数据格式多着呐,自己查一下 SetClipboardData 这个函数
#3
linan032015-10-10 13:26
回复 2楼 rjsp
恩 现在就是在用SetClipboardData函数
黏贴接收端的处理应该是固定的 ,问题就是参数怎么设置,gif图片数据该怎么存储....  
 (至少直接CFile read出来的数据不行.. )
#4
rjsp2015-10-10 14:27
回复 3楼 linan03
这还不简单,你拷贝后,自己用 GetClipboardData 去读取剪切板看看
然后依葫芦画瓢,以后就这样的格式向剪切板中写入数据
#5
linan032015-10-12 13:38
回复 4楼 rjsp
GetClipboardData 需要传入数据的格式,应该是自定义的吧。
我试着用EnumClipboardFormats 想看看,但是不管复制什么文字或是文件,得到的都是0xc009。
总感觉不太对啊,复制文件应该是0xc081 Preferred DropEffect的.....

1: 0xc009 @ 0x00133a58 DataObject
2: 0xc064 @ 0x00133a88 Shell IDList Array

4: 0xc081 @ 0x00133bc8 Preferred DropEffect
5: 0xc078 @ 0x00133bf8 Shell Object Offsets
6: 0xc006 @ 0x00133c30 FileName
7: 0xc007 @ 0x00133c80 FileNameW
8: 0xc013 @ 0x00133cf0 Ole Private Data
#6
rjsp2015-10-12 14:53
回复 5楼 linan03
听不懂你在说什么
我顺手写个代码试试
程序代码:
#include <stdio.h>
#include <windows.h>

int main()
{
    OpenClipboard( NULL );

    for( UINT format=0; format=EnumClipboardFormats(format), format!=0; )
    {
        if( format < 128 )
        {
            printf( "%6u -\n", format ); // CF_TEXT 等
        }
        else
        {
            char name[1000];
            GetClipboardFormatNameA( format, name, 1000 );
            printf( "0x%04X - %s\n", format, name );
        }
    }

    CloseClipboard();
    return 0;
}

然后,在qq中复制一个gif表情,我这里输出是
0xC009 - DataObject
0xC1F4 - QQ_Unicode_RichEdit_Format
0xC1F6 - QQ_RichEdit_Format
0xC0E6 - HTML Format
    13 -
0xC013 - Ole Private Data
    16 -
     1 -
     7 -
在windows资源管理器中复制一个文件,我这里输出是
0xC009 - DataObject
0xC074 - Shell IDList Array
    15 -
0xC2F5 - DataObjectAttributes
0xC0E7 - Preferred DropEffect
0xC0DE - Shell Object Offsets
0xC006 - FileName
0xC007 - FileNameW
0xC013 - Ole Private Data

#7
linan032015-10-14 10:25
回复 6楼 rjsp
非常感谢!
#8
linan032015-10-20 14:33

用 "HTML Format"这种格式的方式就可以实现了
1