【vc++精品源码栏目提醒】:网学会员鉴于大家对vc++精品源码十分关注,论文会员在此为大家搜集整理了“vc++编程技术600个大型项目源码(一) - 技术总结”一文,供大家参考学习
Visual C 开发环境为控件提供的自绘制功能使程序员能够充分发挥自己的创造性来设计比较漂亮的程序界面。
所谓 AVI 按钮是指每当鼠标从按钮上经过时就播放一段按钮提示的AVI,在许多的游戏程序以及三维动画
软件中(如摩托英豪、Cool 3D 等)都广泛的采用了这种 AVI 按钮。
它使得程序的用户界面很具有动感,也使得我们的程序至少看上去更专业,本实例借助 Visual C强大的控件自绘制功能来实现这种 AVI 按钮的原理及实现。
一、实现方法 为了实现能够播放 AVI 视频流的动画按钮,还是需要利用控件的重载功能,这部分内容本书已经在《实例:实现 XP 风格的按钮》中介绍了,这里就不再赘述了,读者可以参考该实例查阅相关内容。
本实例主要探讨如何使用 MFC 的 CanimateCtrl 动画类播放 AVI 格式的视频流,视频流可以来自一个 AVI 文件,也可以来自资源。
在程序中合理地使用动画控件,可以使程序的界面更加形象生动。
MFC 的 CAnimateCtrl 类封装了动画控件,该类的 Create()成员函数负责创建动画控件,其声明为:BOOL Create DWORD dwStyle const RECTamp rect CWnd pParentWnd UINT nID 函数中的参数 dwStyle 是如表一所示的控件风格的组合,参数 rect 指定了控件的尺寸,pParentWnd 指向父窗口,nID 是控件的 ID。
若创建成功则函数返回 TRUE。
风格 含义ACS_CENTER 使动画片居于控件中央,并使动画片打开后控件窗口的尺寸和位置保持不变。
如果不指定该风格,则控件的尺寸会自动调整来适应动画片的大小。
ACS_TRANSPARENT 使动画片的背景透明(不输出动画片的背景色) 。
ACS_AUTOPLAY 一旦打开动画片后就一直重复播放。
表一、动画控件的风格 除 表 中 的 风 格 外 , 一 般 还 要 为 动 画 控 件 指 定 WS_CHILD 、 WS_VISIBLE 和WS_BORDER 窗口风格。
例如,要创建一个能自动播放的动画控件,应该指定其风格为WS_CHILDWS_VISIBLEWS_BORDERACS_AUTOPLAY。
CAnimateCtrl 类主要的成员函数包括:BOOL Open LPCTSTR lpszFileName 、BOOLOpen UINT nID 、 BOOL Play UINT nFrom UINT nTo UINT nRep 、 BOOLSeek UINT nTo 、BOOL Stop 、BOOL Close 等。
上述的 Open()函数从 AVI 文件或资源中打开视频流,如果参数 lpszFileName 或 nID为 NULL,则系统将关闭以前打开的视频流。
Play()函数用来播放选定的视频流,参数nFrom 指定了播放的开始帧的索引,索引值必须小于 65536,若为 0 则从头开始播放。
nTo指定了结束帧的索引,它的值必须小于 65536,若为-1 则表示播放到视频流的末尾。
nRep是播放的重复次数,若为-1 则无限重复播放。
Seek()函数用来静态地显示视频流的某一帧。
参数 nTo 是帧的索引,其值必须小于 65536,若为 0 则显示第一帧,若为-1 则显示最后一帧,若成功则函数返回 TRUE。
Stop()函数用来停止动画片的播放。
Close()函数用来关闭并从内存中清除视频流。
上述所有函数都是调用成功返回 TRUE,否则返回FALSE。
读者朋友们在
学习的过程中要注意, 动画控件并不能播放所有的 AVI 文件,只有满足下列条件的 AVI 文件才能被播放:1)AVI 文件必须是无声的,不能有声道;2)AVI 文件必须是未压缩的,或是用 RLE 算法
压缩的;3)AVI 的调色板必须保持不变。
另外,动画控件最大的一个局限性在于它只能显示系统调色板中缺省的颜色, 因此如果用动画控件来播放一个256 色的 AVI 文件,那么播放效果看起来就象一个 16 色的动画一样,很不理想。
总之,动画控件只能播放一些简单的,颜色数较少的 AVI 动画。
如果要较满意地播放 256 色的 AVI文件,就要利用 MCI 接口,这部分内容请读者朋友参阅有关资料。
二、编程步骤 1、启动 Visual C6.0,生成一个基于对话框的应用程序,取其项目名为 TestAviButton然后按下 Finish 按钮来完成工程的创建; 2、使用 Class Wizard 菜单命令以 CButton 为基类创建 CAviButton 类,生成类的头文件 AviButton.h 和实现文件 AviButton.cpp,同时在类中重载 Create()、DrawItem()函数和 WM_MOUSEMOVE 的消息映射; 3、打开工程中 ID 值为 IDD_TESTAVIBUTTON_DIALOG 的对话框进行编辑,该对话框的提示文本为quot将鼠标移至按钮上:quot删除quot取消quot按钮,将quot确定quot按钮的属性 Styles 改为OwnerDraw 并去掉其提示文本 quot确定quot;另外执行 Insert Resource… 命令,在弹出的对话框中按下 Custom… 按钮,然后输入quotAVIquot,向程序中添加quotAVIquot格式的资源,然后选择AVI 类型的文件向项目中添加quotAVIquot格式的资源 IDR_AVI; 4、添加代码,编译运行程序,此时每当我们的鼠标经过按钮时,一个漂亮的 AVI 按钮就产生了。
三、实现代码///////