testing2007的专栏

在网页中只需要加入以下代码

<objectclassid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="#version=6,0,29,0"width="600"height="60"><paramname="movie"value="test.swf"><paramname="quality"value="high"><paramname="wmode"value="transparent"><embedsrc="***.swf"quality="high"pluginspage=""type="application/x-shockwave-flash"width="600"height="60"></embed></object>

就可以实现 Flash 背景透明在VC中要实现 Flash 背影透明播放,Google了一下找到一个 Demo原文URL:

需要自己实现一个OLE容器,以前很少接触COM,现在要实现的是一个OLE容器,先汗一下!!!!想到一个问题:自己实现一个OLE容器跟使用直接使用FlashOcx 控件有何不同?– 未解决Part 1实现一个ActiveX对象的OLE容器需要继承几个接口IOleClientSiteIOleInPlaceSiteWindowlessIOleInPlaceFrameIStorage(具体做什么,需要找资料恶补一下~~~~ ActiveX, OLE容器……)在DEMO里实现了一个OLE容器类叫 COleContainerWnd

template<CLASST>classCOleContainerWnd:virtualpublicIOleClientSite,virtualpublicIOleInPlaceSiteWindowless,virtualpublicIOleInPlaceFrame,virtualpublicIStorage

是个模板类,T是留给 ActiveX的接口Part 2把 flash.ocx 引进来,因为里面包含了Flash播放器的相关接口定义,它就是我们要放到容器里的 ActiveX 对象了

#import"flash.ocx"named_guids

Part 3CFlashWnd派生类

classCFlashWnd:publicCOleContainerWnd<ShockwaveFlashObjects::IShockwaveFlash>, publicShockwaveFlashObjects::_IShockwaveFlashEvents, publicShockwaveFlashObjects::IServiceProvider

再汗一下,CFlashWnd 是个容器,还要实现public ShockwaveFlashObjects::IServiceProvider 接口作甚?至于要继承 ShockwaveFlashObjects::_IShockwaveFlashEvents 接口的目的是为了接收 Flash 动画发过来的 fscommand()事件,在 Flash的AS(动作脚本)中调用 FsCommand(),就会触发这个事件了(这是一个精通 Flash 的同学告诉我的!!)CFlashWnd 对象的创建

g_flashWnd=newCFlashWnd;g_flashWnd->Create(ShockwaveFlashObjects::CLSID_ShockwaveFlash,WS_EX_LAYERED,WS_POPUP|WS_VISIBLE|WS_CLIPSIBLINGS,g_hWnd,g_hInst);

Create() 函数的第一个参数:Flash 播放对象的ClassIDCreate() 函数的第二个参数:窗体的扩展风格 WS_EX_LAYERED ,据说加了这个风格才能实现透明 Flash ,为啥?……Part 4CFlashWnd::Create() 的内幕注册了窗口类,然后就 CreateWindows 了值得注意的是OleCreate() 函数用来创建一个 IOleObject 对象的实例,需要 把 Ole 容器 的IOleClientSite和 IStorage作为参数传给它别想一下造出大海,必须先由小河川开始。

testing2007的专栏

相关文章:

你感兴趣的文章:

标签云: