C++程序加载Flash动画

在VC中加载Flash动画,一种很方便的方式就是在IDE的类向导生成一个IShockwaveFlash接口的包装类。但小弟十分不喜欢VC的可视化向导,几乎很少用,总是喜欢直接拿代码说话。

下面写段播放Flash的简单代码:

首先要利用#import命令导入Flash控件的类型库,如:#import "PROGID:ShockwaveFlash.ShockwaveFlash" nonamespace raw interfaces only

运行一次后会生成flash.tlh文件,程序中需要的接口定义(如IShockwaveFlash接口)就在此文件中生成。

上代码:

ExpandedBlockStart.gif 代码
//  播放Flash文件
//  hWndAttach: 播放Flash文件所依赖的窗口
//  lpszFlash: 要播放的Flash文件
inline BOOL PlayFlash(HWND hWndAttach, LPCTSTR lpszFlash)
{
    ATLASSERT(::IsWindow(hWndAttach) 
&&  ::PathFileExists(lpszFlash));

    CComPtr
< IShockwaveFlash >  spFlash  =  NULL;

    
//  创建IShockwaveFlash指针对象
    AUX_HRESULT_ASSERT_FAILED_RETURN_VALUE(::CoCreateInstance(__uuidof(ShockwaveFlash), NULL, CLSCTX_ALL, __uuidof(IShockwaveFlash), (LPVOID * ) & spFlash), FALSE);

    ATLASSERT(spFlash 
!=  NULL);

    
//  设置背景透明
    ATLVERIFY(SUCCEEDED(spFlash -> put_WMode(L " transparent " )));

    
//  将IShockwaveFlash对象绑定到指定的窗口上
    AUX_HRESULT_ASSERT_FAILED_RETURN_VALUE(AtlAxAttachControl(spFlash, hWndAttach, NULL), FALSE);

    
//  播放Flash文件
    AUX_HRESULT_ASSERT_FAILED_RETURN_VALUE(spFlash -> put_Movie(CT2OLE(lpszFlash)), FALSE);

    
return  TRUE;
}

 

 

其中AUX_HRESULT_ASSERT_FAILED_RETURN_VALUE宏是为了简便代码的编写而定义的,定义如下:

 

ExpandedBlockStart.gif 代码
#define  AUX_ASSERT_FAILED_RETURN_VALUE(expr, ret)  \
{   \
    BOOL bRet 
=  (expr)  ?  TRUE : FALSE;    \
    ATLASSERT(bRet 
&&  #expr);    \
    
if  ( ! bRet)  return  ret;  \
}

#define  AUX_HRESULT_ASSERT_FAILED_RETURN_VALUE(expr, ret)  \
{  \
    AUX_ASSERT_FAILED_RETURN_VALUE(SUCCEEDED(expr), ret)  \

 

完成后,调用:

PlayFlash(this->GetDlgItem(IDC_FLASH), _T("D:\\test.swf"));

转载于:https://www.cnblogs.com/fangkm/archive/2010/10/16/1852856.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值