




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在VC应用程序中插入微型动画 一、原理在VC中有一个CImageList类可以以图像列表的方式管理图像,图像列表中的图像大小相同,索引以0为开始,每个图像都可以单独引用。Microsoft Win32 的API提供了一系列的函数,您可以利用这些函数创建、销毁图像列表,可以显示图像、增加和删除图像,替代、合并和拖动图像。CImageList 类提供了Windows图像列表通用控件功能。这个控件(也即CImageList类)仅仅适用于运行于Window 95 和Windows NT 3.51版或更高版本。下面对本文用到的函数简要说明如下:BOOL Create( int cx, int cy, UINT nFlags, int nInitial, intnGrow );该函数用于创建一个图像列表。 cx,cy 每个图像的宽度和高度;nFlags图像列表的类型,其值仅可包含一个ILC_COLOR值。其详细取值参见VC在线帮助。nInitial 图像列表最初含有的图像数目;nGrow 当图像数量需要改变时,每次动态增长的图像数。BOOL Draw( CDC* pdc, int nImage, POINT pt, UINT nStyle );该函数用于显示一个图像。pdc 目标设备上下文的指针;nImage 要显示的图像索引;pt 图像显示的位置;nStyle图像显示风格,祥见在线帮助。HICON ExtractIcon( int nImage );利用该函数可以得到一函数的句柄。int Add( HICON hIcon );该函数把一个图像加入图像列表。在程序中声明一个CImageList类,调用Create函数创建该类,然后以一定的时间用Draw函数循环显示图像,就可以形成动画效果。Create类有几个重载函数,可以根据不同的资源调用不同的函数,为了简便其间,本文只采用图标资源,更详细的资料见联机手册。二、编程与实现首先,建立图表资源。在VC6.0中利用资源编辑器,建立几幅图表,IDI_ICON1、IDI_ICON2、IDI_ICON3.,在编辑图标时选者Custom,如图1,将图标设置成大小为64X32,见图2。由于Windows的各个部件不完全相同,其实现方法也不完全相同,下面对在窗口不同位置显示动画的方法分别介绍。Dh1.gif (3933 bytes) Dh2.gif (3933 bytes)图1 定制图标资源 图2 将图标设置为64X321、在View类客户区绘制动画在类的定义文件中加入下列变量:POINT pt1;/图像显示的位置int m_Play; /将要显示图像的索引void CreateImageList();/创建图像列表的函数CImageList m_ImageList1;/图像列表对象int m_ImageNumber; /图像列表中图像的总数目首先在口在函数时初始化pt1,m_Play,m_ImageNumber:CImageView:CImageView()/ TODO: add construction code herept1.x =1;pt1.y =1;m_Play=0;m_ImageNumber=0;CreateImageList()的实现如下:void CImageView:CreateImageList()m_ImageList1.Create (64,32,ILC_COLOR,5,2);HICON hIcon = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1);m_ImageList1.Add(hIcon);m_ImageNumber+;hIcon = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2);m_ImageList1.Add(hIcon);m_ImageNumber+;hIcon = :LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3);m_ImageList1.Add(hIcon);m_ImageNumber+;./把您要播放的所有资源加入图像列表。在OnCreate函数中设置计时器,并创建图像列表:int CImageView:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CView:OnCreate(lpCreateStruct) = -1)return -1;/ TODO: Add your specialized creation code hereCreateImageList();SetTimer(1,500,NULL);return 0;响应ON_TIMER消息,显示动画:void CImageView:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();if(m_Playm_ImageNumber)m_Play=0;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);m_Play+;ReleaseDC(pDC);CView:OnTimer(nIDEvent);最后别忘了在OnDestroy函数中,增加在窗口撤销时中止定时器的代码。2、在状态条上显示动画由于状态条也是窗口,所以也可以在其上显示动画。状态条时主窗口的子窗口,在CMainFrame类中可以看到下列代码:protected: / control bar embedded membersCStatusBar m_wndStatusBar;所以为了在状态条上显示动画,其编程代码应在CMainFrame类中加入。首先创建资源文件和图像列表类,具体方法和代码见View类客户区绘制动画一节,此处不再重复。下面进给出ON_TIMER的响应函数:void CMainFrame:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call defaultif(m_Playm_ImageNumber)m_Play=0;/如果图画为最后一个,显示第一幅图片CDC *pDC=this-m_wndStatusBar.GetDC();ASSERT(pDC!=NULL);pt1.x=1;pt1.y =1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play+;CFrameWnd:OnTimer(nIDEvent);上述代码将在状态条左上方播放动画。三、在工具栏上播放动画由于工具栏的性质与状态条差不多,其播放动画的方法也相似,下面进给出ON_TIMER的响应函数:void CMainFrame:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call defaultif(m_Playm_ImageNumber)m_Play=0;/如果图画为最后一个,显示第一幅图片CRect rect;CDC *pDC;pDC=this-m_wndToolBar.GetDC();ASSERT(pDC!=NULL);this-m_wndToolBar.GetClientRect(&rect);/获得显示有效区域pt1.x =rect.right -64; /将显示位置定在最右边pt1.y=1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play+;CFrameWnd:OnTimer(nIDEvent);上述代码将在工具栏右上方播放动画。但如仔细观察,动画的位置并不是靠近窗口最右边,这是因为工具栏的窗口有边界,采用如下方法,可以把画面移到窗口右边:pDC=GetDC ();/获得CMainFrame的画图设备指针ASSERT(pDC!=NULL);this-GetClientRect(&rect);pt1.x =rect.right-64 ;pt1.y=rect.top+3 ;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);这是因为工具栏占据的位置属于CMainFrame的客户区。4、使图标变成动画在CWnd类中有一个函数HICON SetIcon( HICON hIcon, BOOL bBigIcon );可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司日常关怀活动方案
- 公司搞笑大挑战活动方案
- 公司班组文体活动方案
- 公司清洁活动策划方案
- 公司篮球运动会策划方案
- 公司线下年会活动方案
- 公司美食集市活动方案
- 公司线上拜年节目策划方案
- 公司电脑团购活动方案
- 公司申请经费策划方案
- 2025年人卫题库1类(眼科.带解析)
- 2025年新疆维吾尔阿克苏地区沙雅县小升初数学检测卷含解析
- 《道路交通重大事故隐患排查指引(试行)》知识培训
- 关于八段锦的英语对话
- 核心制度:安全输血制度
- 《中华人民共和国职业分类大典》(2022年版)各行业职业表格统计版(含数字职业)
- 《银行业金融机构安全评估标准》
- 企业内部培训体系搭建及实施效果评估报告
- 湖南省首届财会知识大赛竞赛考试网络答题题库
- 国家开放大学-传感器与测试技术实验报告-实验
- 人工智能知到智慧树章节测试课后答案2024年秋复旦大学
评论
0/150
提交评论