CAnimateCtrl 类

提供 Windows 公共动画控件的功能。

语法

class CAnimateCtrl : public CWnd

成员

公共构造函数

名称 描述
CAnimateCtrl::CAnimateCtrl 构造 CAnimateCtrl 对象。

公共方法

名称 描述
CAnimateCtrl::Close 关闭 AVI 剪辑。
CAnimateCtrl::Create 创建动画控件并将其附加到 CAnimateCtrl 对象。
CAnimateCtrl::CreateEx 创建具有指定 Windows 扩展样式的动画控件并将其附加到 CAnimateCtrl 对象。
CAnimateCtrl::IsPlaying 指示是否正在播放音频视频交错 (AVI) 剪辑。
CAnimateCtrl::Open 从文件或资源中打开 AVI 剪辑并显示第一帧。
CAnimateCtrl::Play 无声播放 AVI 剪辑。
CAnimateCtrl::Seek 显示 AVI 剪辑的选定单帧。
CAnimateCtrl::Stop 停止播放 AVI 剪辑。

注解

此控件(以及 CAnimateCtrl 类)仅适用于在 Windows 95、Windows 98 和 Windows NT 3.51 及更高版本下运行的程序。

动画控件是一个矩形窗口,以 AVI(音频视频交错)格式(标准 Windows 视频/音频格式)显示剪辑。 AVI 剪辑是一系列位图帧,与电影相似。

动画控件只能播放简单的 AVI 剪辑。 具体而言,动画控件播放的剪辑必须满足以下要求:

  • 必须只有一个视频流,且该视频流必须至少有一帧。

  • 文件中最多有两个流(如果存在的话,另一个流通常是一个音频流,尽管动画控件会忽略音频信息)。

  • 剪辑必须未经压缩或使用 RLE8 压缩进行压缩。

  • 视频流中不支持调色板更改。

可以将 AVI 剪辑作为 AVI 资源添加到应用程序中,也可以将其作为单独的 AVI 文件随附应用程序。

由于显示 AVI 剪辑时线程会继续执行,动画控件的一个常见用途是在长时间操作期间指示系统活动。 例如,文件资源管理器的“查找”对话框会在系统搜索文件时显示一个移动的放大镜。

如果在对话框内或使用对话编辑器从对话资源创建 CAnimateCtrl 对象,当用户关闭对话框时,它将自动销毁。

如果在窗口中创建 CAnimateCtrl 对象,可能需要销毁它。 如果在堆栈上创建 CAnimateCtrl 对象,则会自动销毁该对象。 如果使用 new 函数在堆上创建 CAnimateCtrl 对象,则必须在对象上调用 delete 来销毁它。 如果从 CAnimateCtrl 中派生新类并在此类中分配任何内存,请替代 CAnimateCtrl 析构函数来释放分配。

有关使用 CAnimateCtrl 的详细信息,请参阅控件使用 CAnimateCtrl

继承层次结构

CObject

CCmdTarget

CWnd

CAnimateCtrl

要求

标头: afxcmn.h

CAnimateCtrl::CAnimateCtrl

构造 CAnimateCtrl 对象。

CAnimateCtrl();

备注

必须先调用 Create 成员函数,然后才能对创建的对象执行任何其他操作。

示例

// This example creates a secondary thread that implements
// the methods of CAnimateCtrl. The procedure of the thread
// is MyClipThreadProc and the thread was created with the
// code AfxBeginThread( MyClipThreadProc, (LPVOID) pParentWnd).
// The example code creates and initializes an animation control,
// then proceeds to pump messages from the queue until one the
// private messages WM_STOPCLIP, WM_PLAYCLIP, WM_SHOWFIRSTFRAME or
// WM_SHOWLASTFRAME is received. The appropriate action is done for
// these messages. The thread ends when the WM_STOPCLIP is received.
// NOTE: the thread parameter, pParam, is a pointer to a CWnd object
// that will be the parent of the animation control.

#define WM_STOPCLIP WM_USER + 1
#define WM_PLAYCLIP WM_USER + 2
#define WM_SHOWFIRSTFRAME WM_USER + 3
#define WM_SHOWLASTFRAME WM_USER + 4

UINT MyClipThreadProc(LPVOID pParam)
{
   // NOTE: pParentWnd is the parent window of the animation control.
   CWnd *pParentWnd = (CWnd *)pParam;
   CAnimateCtrl cAnimCtrl;

   // Create the animation control.
   if (!cAnimCtrl.Create(WS_CHILD | WS_VISIBLE | ACS_CENTER,
                         CRect(10, 10, 100, 100), pParentWnd, 1))
   {
      return false;
   }

   // Open the AVI file.
   if (!cAnimCtrl.Open(_T("MyAvi.avi")))
   {
      return false;
   }

   // Pump message from the queue until the stop play message is received.
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0) && (msg.message != WM_STOPCLIP))
   {
      switch (msg.message)
      {
         // Start playing from the first frame to the last,
         // continuously repeating.
      case WM_PLAYCLIP:
         if (!cAnimCtrl.Play(0, (UINT)-1, (UINT)-1))
            return false;
         break;

         // Show the first frame.
      case WM_SHOWFIRSTFRAME:
         if (!cAnimCtrl.Seek(0))
            return false;
         cAnimCtrl.RedrawWindow();
         break;

         // Show the last frame.
      case WM_SHOWLASTFRAME:
         if (!cAnimCtrl.Seek((UINT)-1))
            return false;
         cAnimCtrl.RedrawWindow();
         break;
      }

      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   cAnimCtrl.Stop();
   cAnimCtrl.Close();

   return true;
}

CAnimateCtrl::Close

关闭之前在动画控件中打开的 AVI 剪辑(如果有)并将其从内存中删除。

BOOL Close();

返回值

如果成功,则不为零,否则为零。

示例

请参阅 CAnimateCtrl::CAnimateCtrl 的示例。

CAnimateCtrl::Create

创建动画控件并将其附加到 CAnimateCtrl 对象。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

参数

dwStyle
指定动画控件的样式。 将以下注解部分中描述的窗口样式和 Windows SDK 的动画控件样式中描述的动画控件样式任意组合进行应用。

rect
指定动画控件的位置和大小。 它可以是 CRect 对象或 RECT 结构

pParentWnd
指定动画控件的父窗口,通常是 CDialog。 不得为 NULL。

nID
指定动画控件的 ID。

返回值

如果成功,则不为零,否则为零。

注解

分两步构建 CAnimateCtrl。 首先,调用构造函数,然后调用 Create,它会创建动画控件并将其附加到 CAnimateCtrl 对象。

将以下窗口样式应用于动画控件。

  • WS_CHILD(始终使用)

  • WS_VISIBLE(经常使用)

  • 很少 WS_DISABLED

如果要将扩展窗口样式与动画控件配合使用,请调用 CreateEx 而不是 Create

除了以上列出的窗口样式之外,你可能还想将一种或多种动画控件样式应用于动画控件。 有关动画控件样式的详细信息,请参阅 Windows SDK。

示例

请参阅 CAnimateCtrl::CAnimateCtrl 的示例。

CAnimateCtrl::CreateEx

创建一个控件(子窗口)并将其与 CAnimateCtrl 对象相关联。

virtual BOOL CreateEx(
    DWORD dwExStyle,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

参数

dwExStyle
指定要创建的控件的扩展样式。 有关扩展 Windows 样式的列表,请参阅 Windows SDK 中 CreateWindowEx 的 dwExStyle 参数

dwStyle
指定动画控件的样式。 将 Windows SDK 的动画控件样式中描述的窗口和动画控件样式任意组合进行应用。

rect
RECT 结构的引用,该结构描述了要在客户端坐标 pParentWnd 中创建的窗口的大小和位置。

pParentWnd
指向作为控件父级的窗口的指针。

nID
控件的子窗口 ID。

返回值

如果成功,则不为 0;否则为 0。

备注

使用 CreateEx 而不是 Create 来应用由 Windows 扩展样式前言 WS_EX_ 指定的扩展 Windows 样式

CAnimateCtrl::IsPlaying

指示是否正在播放音频视频交错 (AVI) 剪辑。

BOOL IsPlaying() const;

返回值

如果正在播放 AVI 剪辑,则为 TRUE;否则为 FALSE。

备注

此方法将发送 Windows SDK 中描述的 ACM_ISPLAYING 消息。

CAnimateCtrl::Open

调用此函数来打开 AVI 剪辑并显示其第一帧。

BOOL Open(LPCTSTR lpszFileName);
BOOL Open(UINT nID);

参数

lpszFileName
CString 对象或指向以 null 结尾的字符串的指针,该字符串包含 AVI 文件名或 AVI 资源名。 如果此参数为 NULL,系统将关闭之前为动画控件打开的 AVI 剪辑(如果有)。

nID
AVI 资源标识符。 如果此参数为 NULL,系统将关闭之前为动画控件打开的 AVI 剪辑(如果有)。

返回值

如果成功,则不为零,否则为零。

备注

可从创建动画控件的模块中加载 AVI 资源。

Open 不支持 AVI 剪辑中的声音;只能打开无声的 AVI 剪辑。

如果动画控件具有 ACS_AUTOPLAY 样式,动画控件将在打开剪辑后立即自动开始播放剪辑。 当线程继续执行时,它将继续在背景播放剪辑。 剪辑播放完毕后,将自动重复播放。

如果动画控件具有 ACS_CENTER 样式,AVI 剪辑将位于控件中心,且控件的大小不会更改。 如果动画控件没有 ACS_CENTER 样式,当打开 AVI 剪辑时,会重设控件大小(将其调整为 AVI 剪辑中图像的大小)。 控件左上角的位置不会更改,只会更改控件大小。

如果动画控件具有 ACS_TRANSPARENT 样式,将使用透明背景而不是动画剪辑中指定的背景色来绘制第一帧。

示例

请参阅 CAnimateCtrl::CAnimateCtrl 的示例。

CAnimateCtrl::Play

调用此函数可在动画控件中播放 AVI 剪辑。

BOOL Play(
    UINT nFrom,
    UINT nTo,
    UINT nRep);

参数

nFrom
开始播放的帧的从零开始的索引。 值必须小于 65,536。 值为 0 表示从 AVI 剪辑中的第一帧开始。

nTo
播放结束的帧的从零开始的索引。 值必须小于 65,536。 值为 -1 表示以 AVI 剪辑中的最后一帧结束。

nRep
重播 AVI 剪辑的次数。 值为 -1 表示无限期重播文件。

返回值

如果成功,则不为零,否则为零。

备注

当线程继续执行时,动画控件将在背景播放剪辑。 如果动画控件具有 ACS_TRANSPARENT 样式,将使用透明背景而不是动画剪辑中指定的背景色来播放 AVI 剪辑。

示例

请参阅 CAnimateCtrl::CAnimateCtrl 的示例。

CAnimateCtrl::Seek

调用此函数可静态显示 AVI 剪辑的单帧。

BOOL Seek(UINT nTo);

参数

nTo
要显示的帧的从零开始的索引。 值必须小于 65,536。 值为 0 表示显示 AVI 剪辑中的第一帧。 值为 -1 表示显示 AVI 剪辑中的最后一帧。

返回值

如果成功,则不为零,否则为零。

注解

如果动画控件具有 ACS_TRANSPARENT 样式,将使用透明背景而不是动画剪辑中指定的背景色来绘制 AVI 剪辑。

示例

请参阅 CAnimateCtrl::CAnimateCtrl 的示例。

CAnimateCtrl::Stop

调用此函数可停止在动画控件中播放 AVI 剪辑。

BOOL Stop();

返回值

如果成功,则不为零,否则为零。

示例

请参阅 CAnimateCtrl::CAnimateCtrl 的示例。

另请参阅

CWnd 类
层次结构图
CAnimateCtrl::Create
ON_CONTROL