关于动画控件

动画控件是显示音频视频交错(AVI)剪辑的窗口。 AVI 剪辑是一系列位图帧,与电影相似。 动画控件只能显示不包含音频的 AVI 剪辑。

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

注意

如果使用 ComCtl32.dll 版本 6,则不支持线程;确保应用程序不会阻止 UI,否则不会产生动画。

 

动画控件可以显示源自未压缩的 AVI 文件或使用运行长度(BI_RLE8)编码压缩的 AVI 文件。 可以将 AVI 剪辑作为 AVI 资源添加到应用程序中,也可以将剪辑作为单独的 AVI 文件随应用程序一起提供。

注意

AVI 文件或资源不能有声道。 动画控件的功能非常有限,并且可能会更改。 如果需要一个控件为应用程序提供多媒体播放和录制功能,可以使用 MCIWnd 控件。 有关更多信息,请参阅 MCIWnd 窗口类

 

本部分讨论了以下主题。

动画控件创建

动画控件属于 ANIMATE_CLASS 窗口类。 可以使用 CreateWindowCreateWindowEx 函数或 Animate_Create 宏创建动画控件。 宏将动画控件定位在父窗口的左上角。如果未指定 ACS_CENTER 样式,则根据 AVI 剪辑中帧的尺寸设置控件的宽度和高度。 如果指定了 ACS_CENTERAnimate_Create 将控件的宽度和高度设置为零。 可以使用 SetWindowPos 函数设置控件的位置和大小。

如果在对话框中或从对话框资源创建动画控件,则当用户关闭对话框时,该控件将自动销毁。 如果在窗口中创建动画控件,则必须显式销毁该控件。

关于动画控件消息

应用程序将消息发送到动画控件,以打开、播放、停止和关闭相应的 AVI 剪辑。 每个消息都有一个或多个宏,可以使用这些宏来代替显式发送消息。

创建动画控件后,应用程序发送 ACM_OPEN 消息以打开 AVI 剪辑并将其加载到内存中。 该消息指定 AVI 文件的路径或 AVI 资源的名称。 系统从创建动画控件的模块加载 AVI 资源。

如果动画控件具有 ACS_AUTOPLAY 样式,则控件将在 AVI 文件或 AVI 资源打开后立即开始播放 AVI 剪辑。 否则,应用程序可以使用 ACM_PLAY 消息启动 AVI 剪辑。 应用程序可以通过发送 ACM_STOP 消息来随时停止剪辑。 当控件完成播放 AVI 剪辑或发送 ACM_STOP 时,播放的最后一帧将保持显示。

动画控件可以将两个通知代码发送到其父窗口:ACN_STARTACN_STOP。 大多数应用程序都不会处理任一通知。

若要关闭 AVI 文件或 AVI 资源并将其从内存中删除,应用程序可以使用 Animate_Close 宏,该宏发送 ACM_OPEN,文件名或资源名称设置为 NULL

默认消息处理

本部分介绍由 ANIMATE_CLASS 窗口类的窗口过程处理的窗口消息。

Message 已执行的处理
WM_CLOSE 释放与动画控件关联的 AVI 文件或 AVI 资源。
WM_DESTROY 释放 AVI 文件或 AVI 资源,释放内部数据结构,然后调用 DefWindowProc 函数。
WM_ERASEBKGND 使用静态控件的当前背景色擦除窗口背景。
WM_NCCREATE 分配并初始化内部数据结构,然后调用 DefWindowProc
WM_NCHITTEST 返回 HTTRANSPARENT 命中测试值。
WM_PAINT 在动画控件中绘制 AVI 帧。
WM_SIZE 检查控件是否具有 ACS_CENTER 样式。 如果控件不这样做,则调用 DefWindowProc。 否则,它将动画置于控件的中心,使控件无效,然后调用 DefWindowProc