00. 目录

文章目录

  • 00. 目录
  • 01. 案例概述
  • 02. 开发环境
  • 03. 关键技术
  • 04. 程序设计
  • 05. 秘笈心法
  • 06. 源码下载
  • 07. 附录

01. 案例概述

在许多多媒体软件中,状态栏中会播放一个动画,使界面更加美观。本例就实现了一个动画效果的状态栏,效果如下图所示。

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio 2019

03. 关键技术

使状态栏播放一个动画很容易。只要将CAnimateCtrl控件放置在状态栏中就可以了。因为CAnimateCtrl控件可以播放无声的avi动画。在使用CAnimateCtrl控件时,需要使用Open方法和Play方法,下面逐一进行介绍。

Open方法

CAnimateCtrl::OpenBOOL Open(LPCTSTR lpszFileName);
BOOL Open(UNIT nID);返回值:如果成功,则返回非零值,否则为0。参数: lpszFileName CString对象或一个指向一个以空终止符结尾的字符串的指针。此字符串包含了AVI文件的名字或一个AVI资源的名字。如果此参数为空,则系统关闭以前动画控件打开的AVI片段,如果有的话。
nID AVI资源识别器。如果此参数为空,则系统关闭以前动画控件打开的AVI片段,如果有的话。  

Play方法

CAnimateCtrl::PlayBOOL Play(UNIT nFrom, UINT nTo, UINT nRep);返回值:如果成功,则返回非零值,否则为0。参数: nFrom 运行开始的那个帧的基于零的索引。值必须小于65,536。0值意味着从AVI片段的第一帧开始。  nTo 运行结束的那个帧的基于零的索引。值必须小于65,536。-1值意味着以AVI片段的最后一帧结束。  nRep 重新播放AVI片段的次数。值为-1意味着无限地重新运行此文件。  

04. 程序设计

(1)新建一个基于对话框的应用程序。

(2)在对话框中放置CAnimateCtrl控件,并通过类向导将其命名为“m_Animate”。

(3)在对话框类中定义一个CStatusBar变量m_StatusBar。

(4)在对话框的OnInitDialog方法中创建状态栏,并将CAnimateCtrl控件显示在状态栏中。

BOOL CMy1StatusDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);            // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标m_StatusBar.Create(this);UINT panels[4];for (int i = 0; i < 4; i++){panels[i] = 1000 + i;}m_StatusBar.SetIndicators(panels, 4);m_StatusBar.GetStatusBarCtrl().SetMinHeight(50);CRect rect;GetClientRect(rect);int width = rect.Width() / 4;for (int i = 0; i < 4; i++){m_StatusBar.SetPaneInfo(i, panels[i], SBPS_NORMAL, width);}//设置面板信息m_StatusBar.SetPaneText(0, TEXT("当前用户"));m_StatusBar.SetPaneText(1, TEXT("沧海一笑"));m_StatusBar.SetPaneText(2, TEXT("动画"));//m_Animage.SetParent(&m_StatusBar);RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//获取第3个面板的区域大小m_StatusBar.GetStatusBarCtrl().GetRect(3, &rect);CRect progRect(rect.left, 2, rect.right, rect.Height() + 2);//m_Animage.MoveWindow(&progRect);m_Animage.Create(WS_CHILD | WS_VISIBLE, progRect, &m_StatusBar, 100);m_Animage.ShowWindow(SW_SHOW);m_Animage.Open(TEXT("4.avi"));m_Animage.Play(0, -1, -1);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

05. 秘笈心法

状态栏动画的另一种实现

使用CAnimateCtrl控件播放动画比较方便,也可以在状态栏指定区域内用GDI函数来绘制动画。动画就是一幅一幅连续的图像,使用CDC类的Bitblt成员函数绘制连续的图像就可以形成动画效果。

06. 源码下载

下载:【MFC】自绘对话框动画效果的状态栏本.rar

07. 附录

参考: 《Visual C++从入门到精通(项目案例版)》

【MFC】自绘对话框动画效果的状态栏相关推荐

  1. ios animation 动画效果实现

    1.过渡动画 CATransition CATransition *animation = [CATransition animation];[animation setDuration:1.0];[ ...

  2. Android高效率实现弹出带动画效果的对话框,仿照微信对话框效果

    转载请注明出处: http://blog.csdn.net/jakeyangchina/article/details/53423453 看到很多app页面里都有弹出对话框效果,今天使用PopupWi ...

  3. Android 自绘动画效果---小清新等待

    [独具匠心http://my.csdn.net/songxin393764941 未经允许严禁转载,请尊重作者劳动成果.我的博客] 今天给大家带来的是一个等待的动画效果↓ 看到我的照片有没有被迷到啊随 ...

  4. 【MFC】工具栏左侧双线效果

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 由MFC向导创建的文档 ...

  5. 【MFC】工具栏按钮单选效果

    00. 目录 文章目录 00. 目录 01. 案例概述 02. 开发环境 03. 关键技术 04. 程序设计 05. 秘笈心法 06. 源码下载 07. 附录 01. 案例概述 Visual C++在 ...

  6. MFC中模态对话框和非模态对话框的差别

    在MFC中有模态对话框和非模态对话框,那这两种有什么差别呢. 又都是用于什么场合呢. 首先,要弄清楚2种对话框是怎样创建的. 然后要弄清楚2种对话框有什么差别,可能从表面上看,模态会堵塞主对话框.可原 ...

  7. Visual C# 2005 - 利用程序代码制作简单动画效果

    一般的 Windows Form 通常是运用各种控件来显示数据,然而如果您希望在窗体中加入特殊效果来凸显数据内容,那么图形与动画将是非常不错的选择. 一般来说,我们会使用 .Net Framework ...

  8. QGIS 3.14|地震数据动画效果实战(二)动画设置篇

     01 设置图层Temporal属性 在QGIS 3.14中,图层的属性对话框首次加入了 Temporal标签页,提供图层的时间设置. 右键点击[图层]面板中的"quake2020" ...

  9. QGIS 3.14|地震数据动画效果实战(三)进度条设置

    在之前的版本中,QGIS对时间的处理是通过Time Manager插件实现的,QGIS 3.14将Temporal Controller引入软件整体框架之中,以原生的方式支持各类数据集对时间维度的处理 ...

最新文章

  1. 第五课.Python函数(二)
  2. CSS中常用中文字体的Unicode编码
  3. java set排序_Java Set排序的方法
  4. Silverlight - Validation 客户端同步数据验证
  5. flutter 底部动画导航栏
  6. 计算机操作师初级理论知识试卷答案,[计算机操作员初级理论知识试卷1.doc
  7. python安装失败错误代码0x_详解雨林木风Win10提示“Python 0x80070643安装时发生严重错误”解决方法...
  8. 3371 【模板】单源最短路径(Dijsktra)
  9. 如何将.txt中的数据导入.excel
  10. VM15.5安装XP系统
  11. python共享单车数据分析_共享单车数据可视化分析(Python/Seaborn)
  12. 计算机无法识别打印机usb,USB无法识别打印机的解决方案和教程
  13. 判断四边形凹凸性及凹点
  14. myeclipse6.5-8.5 激活码 秘钥 及使用
  15. 全网搜php,PHP实现中文全文搜索的原理介绍
  16. HTML5接入百度地图并搜索定位
  17. 开启邮箱的SMTP服务获取授权码(QQ邮箱、163邮箱)
  18. python中对Routers的理解
  19. Linux简单入门命令
  20. Oracle空闲超时时间设置

热门文章

  1. Windows SharePoint Services 3.0编码开发工具和技巧(Part 1 of 2)
  2. OnInit 和 Page_Init 事件有什么不同
  3. rgb fusion检测不到显卡_买不到RX 6800XT就装不了机解不了馋?我看未必
  4. 怎样分组教学计算机学生才有兴趣,学生计算机论文,关于如何激发职业中专学生学习计算机的兴趣相关参考文献资料-免费论文范文...
  5. session与cookie的简单使用
  6. 转载--html显示当前时间
  7. 年报统计系统—基本信息模块的目标文档
  8. MSIL实用指南-比较运算
  9. bzoj1833: [ZJOI2010]count 数字计数USACO37 Cow Queueing 数数的梦(数位DP)
  10. 下载大文件 不经过php 直接让apache发送文件给客户端 mod_xsendfile