QQ登录

只需一步,快速开始

49上位机VC MFC实现自绘的AVI动画按钮

[ 复制链接 ]

49上位机VC MFC实现自绘的AVI动画按钮

49上位机VC MFC实现自绘的AVI动画按钮

49上位机VC MFC实现自绘的AVI动画按钮


功能展示
在上位机开发时,经常会遇到美化按钮来美化程序界面,能播放AVI动画的按钮会更炫更容易吸引用户的的目光。如何实现动画按钮功能?我们当前例程就实现了,当鼠标划过按钮,就实现按钮动画效果,按钮动画效果如图;
要点提示
我们在当前例程实现按钮的动画效果,主要是通过微软自带的控件CAniamteCtrl类来实现的,当前例程我们就用此类的播放AVI文件函数进行动画播放显示;查询MSDN得知播放AVI文件的函数有Open()方法。此方法打开一个AVI文件或打开一个资源ID,并显示第一帧。BOOL Open( LPCTSTR lpszFileName );
BOOL Open( UINT nID ); play()方法,此方法用于播放一个已打开的AVI,语法如BOOL Play( UINT nFrom, UINT nTo, UINT nRep ); nFrom, nTo 是帧的起始与结束索引, nRep 是否循环播放值为-1时无限循环播放;还有方法是Stop()与Close()函数用于停止与关闭AVI;

实现功能
1.新建基于对话框的应用程序
2.新建一个基于Cbutton的类classCAviButton : public Cbutton;在新建的类中添加变量CAnimateCtrl m_Animate;//用于播放AVI文件BOOL m_bPlay;//用于标识是否播放AVI
int  m_nID;//AVI文件ID;构造函数中初始化m_bPlay = false;

3.添加虚拟函数DrawItem()和DrawButton()实现按钮自绘;
  1. void CAviButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  2. {
  3.         CRect rect;
  4.         GetClientRect(rect);
  5.         if (!::IsWindow(m_Animate))
  6.         {
  7.                 m_Animate.Create(WS_CHILD | WS_VISIBLE,rect,this,0);
  8.                 m_Animate.Open(m_nID);
  9.                 m_Animate.GetClientRect(rect);
  10.                 VERIFY(SetWindowPos(NULL,0,0, rect.Width()+2, rect.Height()+2,SWP_NOMOVE));
  11.                 m_Animate.MoveWindow(rect);
  12.         }

  13.         CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  14.         UINT State = lpDrawItemStruct->itemState;
  15.         DrawButton(pDC,State,rect);        
  16. }
复制代码
  1. void CAviButton::DrawButton(CDC *pDC,UINT nState,CRect rect)
  2. {
  3.         COLORREF UpCol,DownCol;
  4.         if ((nState & ODS_SELECTED) == ODS_SELECTED)
  5.         {
  6.                 UpCol=RGB(0,0,0);
  7.                 DownCol=RGB(0,0,0);
  8.                 m_bPlay = false;
  9.         }
  10.         else if ((nState & ODS_DISABLED) != ODS_DISABLED)
  11.         {
  12.                 UpCol=RGB(255,255,255);
  13.                 DownCol=RGB(128,128,128);
  14.         }
  15.         //画按钮的左边和上边
  16.         CPen pen1,pen2;
  17.         pen1.CreatePen(PS_SOLID,3,UpCol);
  18.         pDC->SelectObject(&pen1);
  19.         pDC->MoveTo(0,rect.Height()-1);
  20.         pDC->LineTo(0,0);                                                            
  21.         pDC->LineTo(rect.Width()-1,0);
  22.         //画按钮的右边和下边
  23.         pen2.CreatePen(PS_SOLID,2,DownCol);
  24.         pDC->SelectObject(&pen2);
  25.         pDC->MoveTo(rect.Width()-1,0);
  26.         pDC->LineTo(rect.Width()-1,rect.Height()-1);
  27.         pDC->LineTo(0,rect.Height()-1);

  28.         pen1.DeleteObject();
  29.         pen2.DeleteObject();
  30. }
复制代码
4.添加OnMouseMove()实现动画的播放效果
  1. void CAviButton::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3.         ClientToScreen(&point);
  4.         CRect rc;
  5.         GetWindowRect(rc);
  6.         if(rc.PtInRect(point))
  7.         {
  8.         if (::IsWindow(m_Animate) && !m_bPlay)
  9.                 {
  10.                         m_Animate.Play(0,-1,1);
  11.                         m_bPlay = true;
  12.                         SetCapture();
  13.                 }
  14.         }
  15.         else
  16.         {
  17.                 m_bPlay = false;
  18.                 ReleaseCapture();
  19.         }
  20.         CButton::OnMouseMove(nFlags, point);
复制代码
5.添加一个接口函数实现动画文件的设置LoadAVI()
void CAviButton:oadAVI(UINT nID)
{
m_nID =nID;
}
6.最后当然是在父窗口定义一个我们自定义的按钮,加载个AVI文件,来实现按钮动画效果

我们来演示功能实现的过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:49.上位机VC MFC实现自绘的AVI动画按钮.rar 
文件大小:932.55 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索