最近在VC中需要显示一个搜索文件的动画,学习了一下如何调用flash,这种方法是从vckbase中的一篇文章学到的,如何操作那里面已经讲的很明白了,感兴趣的可以看一下:
http://www.vckbase.com/document/viewdoc/?id=1201
不过这种方法在程序目录下必须有flash文件,否则调用失败。偶然间又找到另一篇文章,
(http://www.it.com.cn/f/edu/059/7/169769.htm)可以动态的生成flash文件,于是就将这两种方法结合了一下,将vckbase中加载文件的地方换成加载动态生成的flash,全部的代码如下:
void CXXXXX::CreateSearchFlash()
{
CString Type="swf";
HRSRC res=FindResource (NULL,MAKEINTRESOURCE(IDR_SEARCH),Type);
HGLOBAL gl=LoadResource (NULL,res);
//返回指向资源内存的地址的指针
LPVOID lp=LockResource(gl);
//保存的临时文件名
CString filename="search.swf";
HANDLE fp= CreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
DWORD a;
//sizeofResource 得到资源文件的大小
if (!WriteFile (fp,lp,SizeofResource (NULL,res),&a,NULL))
return;
//关闭句柄
CloseHandle (fp);
//释放内存
FreeResource (gl);
//查找flash文件并加载
TCHAR strCurDrt[500];
int nLen = ::GetCurrentDirectory(500,strCurDrt);
if( strCurDrt[nLen]!='//' )
{
strCurDrt[nLen++] = '//';
strCurDrt[nLen] = '/0';
}
CString strFileName = strCurDrt;
strFileName += "search.swf";
m_FlashPlayer.LoadMovie(0, strFileName);
m_FlashPlayer.Stop();
}
需要注意的是在窗口销毁时要删除文件,即响应WM_DESTORY消息,
DeleteFile("search.swf")。