用程序来控制Flash控件(兼谈做CD的自启动程序一法)

类别:VC语言 点击:0 评论:0 推荐:

当前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

是不是很简单

本文地址:http://com.8s8s.com/it/it3321.htm