一、应用概述
VC是Microsoft的一个非常好用的C++编程工具,它的最大优势就是有一个对于程序员来说非常实用的MFC(微软基础类库,Microsoft Foundation Class),掌握和运用好MFC将会给C++编程带来非常高的开发效率。因此,大多数的C++程序员都喜欢用VC,不但开发环境友好,而且有强大的MFC支持。然而,VC的界面设计和时间处理方法非常复杂,很多初学者对于Visual C++ UI设计感到十分的麻烦,无法在有限的时间内设计出美观、用户熟悉的操作界面。
UI即User Interface(用户界面)的简称。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由,充分体现软件的定位和特点。软件界面设计就像工业产品中的工业造型设计一样,是产品的重要买点。一个友好美观的界面会给人带来舒适的视觉享受,拉近人与电脑的距离,为商家创造卖点。界面设计不是单纯的美术绘画,它需要定位使用者、使用环境、使用方式并且为最终用户而设计,是纯粹的科学性的艺术设计。
Macromedia公司推出了交互式矢量图和 Web 动画的标准——Flash。在业界,Flash被称为是“最为灵活的前台”,利用Flash可以创作出既漂亮又可改变尺寸的导航界面以及其他奇特的效果。在我们所熟知的Flash应用于站点建设上,它的使用带来了各种优点,如全面的控制、无缝的导向跳转、更丰富的媒体内容、更体贴用户的流畅交互、跨平台和瘦客户端的支持、以及与其他Flash应用方案无缝连接集成等。而在应用程序开发方面,由于Flash其独特的跨平台特性、灵活的界面控制以及多媒体特性的使用,使得用Flash制作的应用程序具有很强的生命力,在与用户的交流方面具有其他任何方式都无可比拟的优势。在软件系统界面开发方面,Flash对于界面元素的可控性和它所表达的效果无疑具有很大的诱惑。对于一个软件系统的界面,Flash所具有的特性完全可以为用户提供一个良好的接口。
本程序主要应用了Shockwave Flash Object控件在VC++下开发FLASH的应用软件UI启动画面。
二、控件简介
在基于MFC开发应用程序界面时大量使用了Windows标准控件,其实在Windows里,还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本文主要以程序中需要使用到的Flash控件为例细作阐述。
1.控件的注册
不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,可以使用VC附带的工具来注册某个控件。按照以下步骤:在VC的Tools菜单下启动ActiveX Control Test Container;在ActiveX Control Test Container里打开菜单File\Register Controls…;弹出窗口Register Controls显示系统中已注册的所有ActiveX控件,点击左下角的“Register…”按钮;选择待注册的控件文件,如:“C:\WINNT\system32\Macromed\Flash\swflash.ocx”即为Macromedia Flash的ShockwaveFlash控件文件。注册ActiveX控件方法如图1所示。
图1 注册ActiveX控件
还有一种简单一点的办法,使用regsvr32注册即可,如图2为注册画面
图2 使用regsvr32注册ActiveX控件
Shockwave Flash Object控件是一种用于播放Flash动画的IE在插件,基于Microsoft Internet Explorer浏览网页并播放Flash时一般不需要进行额外的Flash播放软件的安装。这是因为在安装Flash的时候就已经安装到系统上了,Flash5.0版本以下的文件名是swflash.ocx,Flash5.0以上版本的名字是Flash.ocx,在系统目录里面应该可以找到:如Windows XP在C:\WINDOWS\system32\Macromed\Flash下有Flash.ocx。所以在本程序的编写过程中并不需要注册这个ActiveX控件。图3中我们可以看到本系统已经注册了Flash9.0版本。
图3 已经注册了的Flash9.0版本ActiveX控件
在VC++ MFC应用程序中引入了Shockwave Flash Object控件并命名后,程序代码中会自动产生CShockwaveFlash类,其框架如图4所示。
图4 CShockwaveFlash的类框架
在VC中CShockwaveFlash的常用函数介绍如下:
Play()
播放动画
StopPlay()
停止动画
IsPlaying()
动画是否正在播放(true,false)
GotoFrame(frame_number)
跳转到某帧(frame_number+1)
TotalFrames()
获取动画总帧数
CurrentFrame()
回传当前动画所在帧数-1
Rewind()
使动画返回第一帧
SetZoomRect(left,top,right,buttom)
放大指定区域
Zoom(percent)
改变动画大小
Pan(x_position,y_position,unit)
使动画在x,y方向上平移
PercentLoaded()
返回动画被载入的百分比(0-100)
LoadMovie(level_number,path)
加载动画
TGotoFrame(movie_clip,frame_number)
movie_clip跳转到指定帧数
TGotoLabel(muvie_clip,label_name)
movie_clip跳转到指定标签
TCurrentFrame(movie_clip)
回传movie_clip当前帧-1
TCurrentLabel(movie_clip)
回传movie_clip当前标签
TPlay(movie_clip)
播放movie_clip
TStopPlay(movie_clip)
停止movie_clip的播放
GetVariable(variable_name)
获取变量
SetVariable(variable_name,value)
变量赋值
TCallFrame(movie_clip,frame_number)
call指定帧上的action
TCallLabel(movie_clip,label)
call指定标签上的action
TGetProperty(movie_clip,property)
获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)
设置movie_clip的指定属性
三、程序代码
创建一个基于MFC的单文档(SDI)界面的应用程序,名为FlashCover。创建对话框。打开资源栏,建立一个新对话框,名称设定为IDD_FLASHCOVER_DIALOG,然后建立该对话框的类CFlashCoverDlg。
添加Shockwave Flash Object控件。建立对话框应用程序后,在主菜单里选择“工程->添加至工程->components and controls”菜单选项,此时会弹出一个components and controls gallery文件选择对话框,里面有两个文件夹,一个是registered activex controls,一个是Visual C++ Components。选择第一文件夹后会出现一系列系统上已注册过的Activex控件。在里面选择shockwave flash object,点击insert将它插入工程中。因为在VC++中插入工程的控件要通过一个类来操作,所以VC++会提示为这个控件指定一个类名,可以使用默认的类名就行了。插入后VC++会自动把这个类加入工程里面。具体步骤如图5、图6所示。
图5 添加Shockwave Flash Object控件
图6 为Shockwave Flash Object控件类命名
在类CFlashCoverDlg的头文件中添加flash控件的头文件:
#include "ShockwaveFlash.h"。
然后添加两个成员变量:
CString m_FlashFileName; //flash动画的文件名
CShockwaveFlash m_flashctrl; // flash控件的对象
在类CFlashCoverDlg的实现文件中添加如下代码:
CFlashCoverDlg::CFlashCoverDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFlashCoverDlg::IDD, pParent)
{
//开始读取封面配置ini文件
FILE *p_IniFile;
char CoverFileName[80];
CString strPath;
//获取应用程序所在路径 being
//定义文件路径缓冲区
TCHAR strCurDrt[_MAX_PATH];
//获取文件路径
::GetModuleFileName(NULL,strCurDrt,_MAX_PATH);
char* p = strCurDrt;
while(strchr(p,'\\'))
{
p = strchr(p,'\\');
p++;
}
*p = '\0';
strPath = strCurDrt;
//获取应用程序所在路径 End
//获取封面配置文件
CString strIniPath = strPath + "Config\\FlashCover.ini";
//判断封面配置文件是否存在
if((p_IniFile = fopen(strIniPath,"r")) == NULL)
{
AfxMessageBox("Faile to Open File!");
return;
}
else
{
while(!feof(p_IniFile))
{
//读取配置文件内容
fscanf(p_IniFile,"%s",CoverFileName);
}
}
fclose(p_IniFile);
//读取封面配置ini文件结束
//将片头flash文件用播放对话框的成员变量来表示,为以后实现更换不同片头做准备
m_FlashFileName = CoverFileName;
}
用类向导生成CFlashCoverDlg的ON_WM_INITDIALOG消息处理函数OnInitDialog,并添加如下代码:
BOOL CFlashCoverDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//获取屏幕的宽和高
int CX=::GetSystemMetrics(SM_CXSCREEN);
int CY=::GetSystemMetrics(SM_CYSCREEN);
//建立FLASH播放的窗口矩形
CRect rect(0,0,CX,CY);
::MoveWindow(GetSafeHwnd(),0,0,CX,CY,TRUE);
GetClientRect(&rect);
m_flashctrl.Create("FlashCover",WS_POPUP|WS_VISIBLE,rect,this,ID_FLASHWIN,NULL,FALSE,NULL);
char szCurPath[_MAX_PATH];
HINSTANCE hInst=NULL;
GetModuleFileName(hInst,szCurPath,_MAX_PATH);
char* p = szCurPath;
while(strchr(p,'\\'))
{
p = strchr(p,'\\');
p++;
}
*p = '\0';
CString strFilename = szCurPath;
// 获取播放FLASH文件名
strFilename += "flash\\"+m_FlashFileName;
//播放FLASH动画
m_flashctrl.SetMovie(strFilename);
return TRUE;
}
在类CFlashCover的头文件中添加如下头文件:
#include "FlashCoverDlg.h"
//建立flash启动封面对话框变量
CFlashCoverDlg flashDlg;
//建立FLASH窗口启动标志
BOOL nFlag;
然后在CFlashCover的实现文件中的InitInstance函数中添加如下代码:
BOOL CFlashCoverApp::InitInstance()
{
…
//增加flash启动封面
nFlag=TRUE;
flashDlg.DoModal();
SetRegistryKey(_T("计算机学院"));
LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
…
}
用类向导生成CFlashCoverApp的消息处理函数PreTranslateMessage。
BOOL CFlashCoverApp::PreTranslateMessage(MSG* pMsg)
{
//如果有鼠标或者键盘响应,则终止FLASH窗口
if (flashDlg&&
(pMsg->message==WM_KEYDOWN||
pMsg->message==WM_SYSKEYDOWN||
pMsg->message==WM_LBUTTONDOWN||
pMsg->message==WM_RBUTTONDOWN||
pMsg->message==WM_MBUTTONDOWN||
pMsg->message==WM_NCLBUTTONDOWN||
pMsg->message==WM_NCRBUTTONDOWN||
pMsg->message==WM_NCMBUTTONDOWN))
{
flashDlg.EndDialog(IDCANCEL);
nFlag=FALSE;
return TRUE;
}
return CWinApp::PreTranslateMessage(pMsg);
}
本Flash的UI启动画面程序在VC++6.0,WindowsXP环境下调试通过。编译并运行程序,可以实现预期的Flash动画播放的效果,Flash启动画面执行最终效果如图7所示。
图7 Flash启动画面执行静态效果图
四、结语
本文详细地介绍了在VC++应用程序中使用Flash控件的方法并实现了Flash的UI启动画面。读者在本程序的基础上稍加改造,便能编写出界面美观的应用软件,为用户提供一个良好的操作界面。
|