MFC里创建FLASH控件,并从内存流中载入SWF

1,在stdafx.h里引用如下头文件
#include <atlbase.h>

extern CComModule _Module;     
#include <atlcom.h>
#include <oleacc.h>
#include <comdef.h>
#pragma comment(lib,"atl")
#pragma comment(lib,"User32.lib")

#import "c:\WINDOWS\system32\Macromed\Flash\Flash32_11_5_502_135.ocx"
using namespace ShockwaveFlashObjects;
 
<p>#pragma pack(push, 1)</p><p>
typedef struct _FLASH_STREAM_HEADER
{
    DWORD m_dwSignature;
    DWORD m_dwDataSize;
} FLASH_STREAM_HEADER, *PFLASH_STREAM_HEADER;</p><p>#pragma pack(pop)</p>
<pre class="cpp" name="code"> 
BOOL CFlashTest::InitInstance()
{
	...
	CoInitialize(NULL);
	AtlAxWinInit();
}
<pre class="cpp" name="code">2创建FLASH控件并从内存流中载入
	CRect rc;
	GetClientRect(&rc);

	static CWnd wnd;
	

	BOOL bRet = wnd.CreateControl("ShockwaveFlash.ShockwaveFlash","flash",WS_CHILD|WS_VISIBLE,rc,this,0x223);

	CComPtr<IShockwaveFlash> spFlash;
	LPUNKNOWN pUnknow = wnd.GetControlUnknown();
	pUnknow->QueryInterface(__uuidof(IShockwaveFlash),(void **)&spFlash);
	
	HRSRC hRes = FindResource(NULL,(LPCTSTR)IDR_SWF1,"SWF");
	if (hRes)
	{
		DWORD dwResourceDataSize = SizeofResource(NULL,hRes);
		
		HGLOBAL hResourceLoaded = ::LoadResource(NULL, hRes);

		IStream *spStream;
		HRESULT hResult = ::CreateStreamOnHGlobal(NULL, TRUE, &spStream);

		FLASH_STREAM_HEADER fsh = {0x55665566, dwResourceDataSize};
		
		ULARGE_INTEGER uli = {sizeof (fsh) + dwResourceDataSize};
		
		hResult = spStream->SetSize(uli);

		hResult = spStream->Write(&fsh, sizeof (fsh), NULL);
	
		
		hResult = spStream->Write(reinterpret_cast<void*>(hResourceLoaded), dwResourceDataSize, NULL);
		

		uli.QuadPart = 0;
		
		hResult = spStream->Seek(*reinterpret_cast<PLARGE_INTEGER>(&uli), STREAM_SEEK_SET, NULL);

		CComPtr<IPersistStreamInit> spPersistStreamInit; 
		
		

		spFlash.QueryInterface(&spPersistStreamInit);
		spPersistStreamInit->Load(spStream);

		
	
		

	}




 
 
<pre>
 
 
 
 
 
 
</pre><pre class="cpp" name="code">
 
 
 

                
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值