工控编程吧
标题:
49上位机VC MFC实现自绘的AVI动画按钮
[打印本页]
作者:
qq263946146
时间:
2015-12-5 21:58
标题:
49上位机VC MFC实现自绘的AVI动画按钮
(, 下载次数: 2)
上传
点击文件名下载附件
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()实现按钮自绘;
void CAviButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rect;
GetClientRect(rect);
if (!::IsWindow(m_Animate))
{
m_Animate.Create(WS_CHILD | WS_VISIBLE,rect,this,0);
m_Animate.Open(m_nID);
m_Animate.GetClientRect(rect);
VERIFY(SetWindowPos(NULL,0,0, rect.Width()+2, rect.Height()+2,SWP_NOMOVE));
m_Animate.MoveWindow(rect);
}
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
UINT State = lpDrawItemStruct->itemState;
DrawButton(pDC,State,rect);
}
复制代码
void CAviButton::DrawButton(CDC *pDC,UINT nState,CRect rect)
{
COLORREF UpCol,DownCol;
if ((nState & ODS_SELECTED) == ODS_SELECTED)
{
UpCol=RGB(0,0,0);
DownCol=RGB(0,0,0);
m_bPlay = false;
}
else if ((nState & ODS_DISABLED) != ODS_DISABLED)
{
UpCol=RGB(255,255,255);
DownCol=RGB(128,128,128);
}
//画按钮的左边和上边
CPen pen1,pen2;
pen1.CreatePen(PS_SOLID,3,UpCol);
pDC->SelectObject(&pen1);
pDC->MoveTo(0,rect.Height()-1);
pDC->LineTo(0,0);
pDC->LineTo(rect.Width()-1,0);
//画按钮的右边和下边
pen2.CreatePen(PS_SOLID,2,DownCol);
pDC->SelectObject(&pen2);
pDC->MoveTo(rect.Width()-1,0);
pDC->LineTo(rect.Width()-1,rect.Height()-1);
pDC->LineTo(0,rect.Height()-1);
pen1.DeleteObject();
pen2.DeleteObject();
}
复制代码
4.添加OnMouseMove()实现动画的播放效果
void CAviButton::OnMouseMove(UINT nFlags, CPoint point)
{
ClientToScreen(&point);
CRect rc;
GetWindowRect(rc);
if(rc.PtInRect(point))
{
if (::IsWindow(m_Animate) && !m_bPlay)
{
m_Animate.Play(0,-1,1);
m_bPlay = true;
SetCapture();
}
}
else
{
m_bPlay = false;
ReleaseCapture();
}
CButton::OnMouseMove(nFlags, point);
复制代码
5.添加一个接口函数实现动画文件的设置LoadAVI()
void CAviButton:
oadAVI(UINT nID)
{
m_nID =nID;
}
6.最后当然是在父窗口定义一个我们自定义的按钮,加载个AVI文件,来实现按钮动画效果
我们来演示功能实现的过程
[iqiyi]http://player.video.qiyi.com/ae045e6bc754f9b7e732a9e4df40d065/0/0/w_19rt6f34tx.swf-albumId=4979979609-tvId=4979979609-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 3)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4