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

    技术2022-05-11  142

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

    是不是很简单


    最新回复(0)