一、准备工作
1.下载并安装Adobe Flash Player。从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player并安装。对于Windows 32位系统,其默认安装目录为:C:/WINDOWS/system32/Macromed/Flash/;对于64位系统,为:C:/Windows/SysWOW64/Macromed/Flash。Flash控件文件的后缀为“ocx”,如我的Flash控件在目录“C:\WINDOWS\system32\Macromed\Flash”下,文件名为“Flash32_20_0_0_270.ocx”。
2. 注册Flash控件。 单击屏幕左下角“开始”,点击“运行”,并输入:“regsvr32 C:\WINDOWS\system32\Macromed\Flash32_20_0_0_270.ocx” 注册该控件(注册之后就可以在项目中进行控件添加了),如果注册成功,则会弹出提示对话框“DllRegisterServer在C:\WINDOWS\system32\Macromed\Flash32_20_0_0_270.ocx已成功”。
3. 准备好事先下载的或自己制作的Flash动画。
二、实现方法1. 打开Visual Studio(我的是2010版本),新建项目,选择“MFC应用程序”,并将其命名为“MFCFlash”。在接下来的选项设置中,选择应用程序类型为“基于对话框”,其他可按默认设置。项目建成后,程序默认添加了名为“MFCFlashD”和“MFCFlashDlg”的头文件和实现文件,如下图所示:
2. 在资源视图中,在“Dialog”上右键,选择"插入Dialog",设置属性: “Border”为“none”,“Title Bar”为“False”,使对话框不显示标题栏和边框。改ID为“IDD_SPLASHSCREEN_DIALOG”。删除对话框上的“确定”和“关闭”按钮。如下图所示:
3. 为了操作对话框,需将其关联一个类。在刚才插入的对话框上右键,选择添加类,设置类名“CSplashScreenDlg”,点击完成,程序会自动添加该类的头文件和源文件。将 "#include SplashScreenDlg.h”语句添加到“MFCFlashDlg.h”中,以便后续在“MFCFlashDlg.cpp”中使用“CSplashScreenDlg”类。
4. 添加Shockwave Flash Object类。点击“项目”→“类向导”,在弹出的对话框中单击右上角的“添加类”,选择“ActiveX控件中的MFC类”,打开“从ActiveX控件添加类向导”对话框。选择从“文件”添加类,找到Flash控件的安装位置,即可添加Shockwave Flash控件,接口选择“IShockwaveFlash”,以生成CShockwaveFlash类(类的名称可以修改)。插入后,VC会自动把这个类加入工程里面。
5. 插入ActiveX控件。在“IDD_SPLASHSCREEN_DIALOG”对话框上点击右键,选择“插入ActiveX控件”,从弹出的列表中选择“Shockwave Flash Object”。调整ActiveX控件的大小,使之完全覆盖住对话框背景。
6. 为ActiveX控件关联变量。为了操作ActiveX控件,需将其关联为一个变量。在Flash控件上点右键,然后选择“添加变量”,设定“变量名”为:m_FlashPlayer。
7. 为对话框添加初始化命令和定时器响应。打开类向导,选择虚函数标签页,选择OnInitDialog(),单击添加。选择消息标签页,选择“WM_TIMER”,单击添加。在“MFCFlashDlg.cpp”文件中,找到CMFCFlashDlg::OnInitDialog()函数,在“return TRUE”之前添加代码:
SetTimer(1, 3000, NULL); //设置定时器,定时3秒钟
////获取Flash文件完整路径
CString m_sRootPath;
GetModuleFileName(NULL,m_sRootPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
m_sRootPath.ReleaseBuffer ();
int nPos;
nPos=m_sRootPath.ReverseFind ('\\');
m_sRootPath=m_sRootPath.Left (nPos);
CString strMovieUrl = m_sRootPath + "\\start.swf" ; //flash文件“start.swf”应放在Debug目录下
////加载并播放动画
m_FlashPlayer.LoadMovie (0, strMovieUrl);
m_FlashPlayer. Play ();
switch(nIDEvent)
{
case 1: //如果id为1的timer结束,则执行关闭窗口操作
SendMessage(WM_CLOSE);
break;
default:
break;
}
CSplashScreenDlg spldlg;
spldlg.DoModal();
生成解决方案,运行程序,进行测试。