你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
5.8 Flash的UI启动画面
 

一、应用概述

VCMicrosoft的一个非常好用的C++编程工具,它的最大优势就是有一个对于程序员来说非常实用的MFC(微软基础类库,Microsoft Foundation Class),掌握和运用好MFC将会给C++编程带来非常高的开发效率。因此,大多数的C++程序员都喜欢用VC,不但开发环境友好,而且有强大的MFC支持。然而,VC的界面设计和时间处理方法非常复杂,很多初学者对于Visual C++ UI设计感到十分的麻烦,无法在有限的时间内设计出美观、用户熟悉的操作界面。

UIUser 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控件为例细作阐述。

    .控件的注册

    不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,可以使用VC附带的工具来注册某个控件。按照以下步骤:在VCTools菜单下启动ActiveX Control Test Container;在ActiveX Control Test Container里打开菜单File\Register Controls…;弹出窗口Register Controls显示系统中已注册的所有ActiveX控件,点击左下角的“Register…”按钮;选择待注册的控件文件,如:“C:\WINNT\system32\Macromed\Flash\swflash.ocx”即为Macromedia FlashShockwaveFlash控件文件。注册ActiveX控件方法如图1所示。

 


1 注册ActiveX控件

还有一种简单一点的办法,使用regsvr32注册即可,如图2为注册画面


2 使用regsvr32注册ActiveX控件

 

    Shockwave Flash Object控件是一种用于播放Flash动画的IE在插件,基于Microsoft Internet Explorer浏览网页并播放Flash时一般不需要进行额外的Flash播放软件的安装。这是因为在安装Flash的时候就已经安装到系统上了,Flash5.0版本以下的文件名是swflash.ocxFlash5.0以上版本的名字是Flash.ocx,在系统目录里面应该可以找到:如Windows XPC:\WINDOWS\system32\Macromed\Flash下有Flash.ocx。所以在本程序的编写过程中并不需要注册这个ActiveX控件。图3中我们可以看到本系统已经注册了Flash9.0版本。


3 已经注册了的Flash9.0版本ActiveX控件

 

    VC++ MFC应用程序中引入了Shockwave Flash Object控件并命名后,程序代码中会自动产生CShockwaveFlash类,其框架如图4所示。


4  CShockwaveFlash的类框架

 

VCCShockwaveFlash的常用函数介绍如下:

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;

}

用类向导生成CFlashCoverDlgON_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);

}

FlashUI启动画面程序在VC++6.0,WindowsXP环境下调试通过。编译并运行程序,可以实现预期的Flash动画播放的效果,Flash启动画面执行最终效果如图7所示。


7  Flash启动画面执行静态效果图

四、结语

本文详细地介绍了在VC++应用程序中使用Flash控件的方法并实现了FlashUI启动画面。读者在本程序的基础上稍加改造,便能编写出界面美观的应用软件,为用户提供一个良好的操作界面。

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089