首先对标题说明一下,在MSN中,聊天的窗口可能是一个自定义的类。大家用Spy ++可以看看。对与自定义窗口,可以使用CreateWindow, SetWindowLong或者是SubclassWindow实现,不过这不是我现在讨论的话题。 好, 先看看效果再说:
关于这个的实现。我们首先应该明了,我们必须实现一个OLE对象。而且这个对象能够播放GIF.对于播放GIF,代码已经很多了。
有了这个就完了么?当然不是。你还有写一个OLE/COM对象。实现IOleObject等。你是用ATL还是MFC呢?我什么也没有用。在这个目录下%program file%\tencent\qq\,你可以看到一个ImageOle.dll,她就是你日夜思念的人!
好吧,让我们来看看他的真面目。怎么看?X Ray? 当然不是——OLE/COM Viewer.Click on “All Objects”,View TypeLib... 打开那个文件,你可以看到:
[ uuid(0C1CF2DF-05A3-4FEF-8CD4-F5CFC4355A16), helpstring("IGifAnimator Interface"), dual, nonextensible ] dispinterface IGifAnimator { properties: methods: [id(0x00000001), helpstring("method LoadFromFile")] void LoadFromFile([in] BSTR FileName); [id(0x00000002), helpstring("method TriggerFrameChange")] VARIANT_BOOL TriggerFrameChange(); [id(0x00000003), helpstring("method GetFilePath")] BSTR GetFilePath(); [id(0x00000004), helpstring("method ShowText")] void ShowText([in] BSTR Text); }; 这个接口就是我们要的。你可以用ActiveX Control Test Container测试一下。还挺管用的。
以下给出代码: 首先我们导入ImageOle.dll
#import "D:\\Program files\\tencent\\qq\\ImageOle.dll" named_guids named_guids 表示让编译器为我把对应库的GUID和声明对应起来。我们就可以用CLSID_GifAnimator引用对应的接口了。不用那一长串的东西。然后它就会为我们生成两个文件。
|