当前Flash很流行,而且Flash以控件形式提供IE,既然是控件,我们就可以用VC或
别的什么语言来控制它。
Flash 控件的播放功能很好实现,它有一个强大的命令 FSCommand,可用来向应
用程序发消息,截获此消息,我们可以实现很多功能。这样就可以结合Flash的漂
亮界面与VC的强大功能!
下面以用Flash控件做CD的autorun为例说明:
CD自启动程序一般是运行后有一个界面,进而有不同的安装项,这里,先应作一
个Flash动画,一个漂亮的界面,加上几个按钮,点不同的按钮,就发出不同的
FSCommand命令。FSCommand由命令就是两个字符串,响应FSCommand事件
应用程序可能得到这两个字符串,相关设计可以参考Flash动画制作的相关书
籍,这里不作说明
先用VC建一单文档无View/Doc的项目,导入flash控件,从头文件shockwaveflash.h
上可以看出,我们可能控制动很多细节,这里,我只关Create和SetMovie函数
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID); }
void SetMovie(LPCTSTR lpszNewValue);
在类CChildView中加入一个Flash控件,方法,在头文件中定义
public:
CShockwaveFlash m_flash;
重载CChildView的OnCreate
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd ::OnCreate(lpCreateStruct) == -1)
return -1;
m_flash.Create(NULL,NULL, WS_CHILD|WS_VISIBLE, CRect(0, 0, 0, 0), this, FLASHID);
m_flash.SetMovie(szWorkPath+"Autorun.SWF");
return 0;
}
上面SetMovie的参数是flash文件的完整文件名
最后就是响应动画的FSCommand命令,即在CChildView中响应FSCommand事件
BEGIN_EVENTSINK_MAP(CChildView,CWnd)
ON_EVENT(CChildView, FLASHID, 150 /* FSCommand */, OnFSCommandFlash, VTS_BSTR VTS_BSTR)
END_EVENTSINK_MAP()
afx_msg void CChildView::OnFSCommandFlash(LPCTSTR command, LPCTSTR args)
{
if(strcmp(command,"quit")==0)
{
m_flash.Stop();
AfxGetMainWnd()->PostMessage(WM_CLOSE);
}
else if(strcmp(command,"SetupPath")==0)
DoRun( args );
else if(strcmp(command,"OpenPath")==0)
DoExplore( args );
else
{
}
}
其中 command 和 args 就是FSCommand发出的两个字符串,由于command,
和 args 内容由动画文件autorun.swf来确定,改变autorun.swf就可以有不同的
CD自启动程序。
上例中,有一个按钮发出的是 {"quit", ""} 令程序退出
另有一个按钮发出的是 {"OpenPath", ""} 令程序打开当前目录
还有几个是{"SetupPath", "soft1\setup.exe"} 令程序运行子目录soft1下的setup.exe
即安装soft1,同样,可能还有按钮发出的是
{"SetupPath", "soft2\setup.exe"} 安装soft2
{"SetupPath", "soft3\setup.exe"} 安装soft3
是不是很简单