这个问题在以前的帖子中被提过很多次,一直没有好的解决方法,codeproject有篇文章《transparent flash control in plain C++》确实实现了flash透明播放,可是cpu占用率过高,没有使用价值。csdn上有个dynamicgif库,貌似完美实现flash透明背景播放,不过没代码。哪位大牛知道解决方案,跪求!(研究了好久,不知道如何解决)

解决方案 »

  1.   

    flash 有一个属性 设置成透明的 在 WMODE属性里 选择 "Transparent" flash就是透明的了
    如果是动态创建的就麻烦点,在创建完成之后,进行任何操作之前,设置这个属性,实在不行就修改mfc/atl源代码在创建之后就马上设置这个属性,一定行的
    你所说的cpu占用率的问题,在我这里和是否透明无关,只有 flash 运行 cpu就飙高,没法解决
      

  2.   

    这么简单的话,就不会有那篇文章《transparent flash control in plain C++》
      

  3.   

    关键是IID_IViewObjectEx的渲染.
    可以把它改到Timer:
    void CCxFlash::OnTimer(WPARAM wParam,LPARAM lParam)
    {
    if(wParam==m_wTimerEvent)
    {
    //ViewObject->Draw(DVASPECT_CONTENT,-1,NULL,NULL,NULL,*dc,(RECTL*)&r,(RECTL*)&r,NULL,NULL);
    OleDraw(ViewObject, DVASPECT_CONTENT, *m_MemDC, &r);
    }
    }
      

  4.   

    OnTimer 是根据 flash的帧速率设置的吗?
      

  5.   

    在不渲染时,它就是一个无窗口的flash内核,显示出来占不占CPU,这个是你的代码优化问题.
    Timer速率这个要看实际应用,可以为帧速率,也可以不是,这个自已可以对应显示效果调整.
      

  6.   

    关键是怎样优化渲染的代码,OleDraw(ViewObject, DVASPECT_CONTENT, *m_MemDC, &r);占用了大部分的cpu。
      

  7.   

    flash 貌似在24位色下才能实现透明 
      

  8.   

    我也研究了一段时间了,呵呵包括flash box (delphi), age flash packer等都用了楼主找到的这个技术,效率都不理想。只有ice project 的效率非常好。推测是使用了rgn相关的函数。但因为个人精力有限,没有去研究。如果楼主有时间的话,可以下载iceProject看看,有什么结果要分享哟,呵呵