应用程序必须为要使用 Windows 动画进行动画处理的每个视觉特征创建动画变量。
概述
动画变量是使用动画管理器创建的,应用程序应根据需要保留对每个变量的引用。 应用程序通常会创建每个动画变量,同时创建其动画的视觉对象。
创建动画变量时,必须指定其初始值。 此后,只能通过安排动画情节提要来更改其值。
动画变量在构造情节提要时作为参数传递,因此,在不再需要对其表示的视觉特征进行动画处理之前,应用程序不应释放它们,这通常是在关联的视觉对象即将被销毁时。
示例代码
对颜色进行动画处理
以下示例代码取自 Windows 动画示例中的 MainWindow.cpp 应用程序驱动动画 和 计时器驱动动画。 在本示例中,使用 CreateAnimationVariable 创建三个动画变量来表示背景色。 该代码还使用 SetLowerBound 和 SetUpperBound 方法来控制动画变量的值。
const DOUBLE INITIAL_RED = COLOR_MAX;
const DOUBLE INITIAL_GREEN = COLOR_MAX;
const DOUBLE INITIAL_BLUE = COLOR_MAX;
HRESULT hr = m_pAnimationManager->CreateAnimationVariable(
    INITIAL_RED,
    &m_pAnimationVariableRed
    );
if (SUCCEEDED(hr))
{
    hr = m_pAnimationVariableRed->SetLowerBound(COLOR_MIN);
    if (SUCCEEDED(hr))
    {
        hr = m_pAnimationVariableRed->SetUpperBound(COLOR_MAX);
        if (SUCCEEDED(hr))
        {
            hr = m_pAnimationManager->CreateAnimationVariable(
                INITIAL_GREEN,
                &m_pAnimationVariableGreen
                );
            if (SUCCEEDED(hr))
            {
                hr = m_pAnimationVariableGreen->SetLowerBound(COLOR_MIN);
                if (SUCCEEDED(hr))
                {
                    hr = m_pAnimationVariableGreen->SetUpperBound(COLOR_MAX);
                    if (SUCCEEDED(hr))
                    {
                        hr = m_pAnimationManager->CreateAnimationVariable(
                            INITIAL_BLUE,
                            &m_pAnimationVariableBlue
                            );
                        if (SUCCEEDED(hr))
                        {
                            hr = m_pAnimationVariableBlue->SetLowerBound(COLOR_MIN);
                            if (SUCCEEDED(hr))
                            {
                                hr = m_pAnimationVariableBlue->SetUpperBound(COLOR_MAX);
                            }
                        }
                    }
                }
            }
        }
    }
}
请注意 MainWindow.h 中的以下定义。
class CMainWindow
{
    ...
private:
    // Animated Variables
    IUIAnimationVariable *m_pAnimationVariableRed;
    IUIAnimationVariable *m_pAnimationVariableGreen;
    IUIAnimationVariable *m_pAnimationVariableBlue;
    ...
};
对 x 和 y 坐标进行动画处理
以下示例代码取自 Windows 动画 网格布局示例中的 Thumbnail.cpp;请参阅 CMainWindow::CreateAnimationVariables 方法。 创建两个动画变量来表示每个对象的 X 和 Y 坐标。
// Create the animation variables for the x and y coordinates
hr = m_pAnimationManager->CreateAnimationVariable(
    xInitial,
    &m_pAnimationVariableX
    );
if (SUCCEEDED(hr))
{
    hr = m_pAnimationManager->CreateAnimationVariable(
        yInitial,
        &m_pAnimationVariableY
        );
    ...
}
请注意 Thumbnail.h 中的以下定义。
class CThumbnail
{
public:
    ...
    // X and Y Animation Variables
    IUIAnimationVariable *m_pAnimationVariableX;
    IUIAnimationVariable *m_pAnimationVariableY;
    ...
};
动画变量是浮点数,但它们的值也可以作为整数提取。 默认情况下,每个值将舍入为最接近的整数,但可以替代用于变量的舍入模式。 下面的示例代码使用 SetRoundingMode 方法指定值应始终向下舍入。
hr = m_pAnimationVariableX->SetRoundingMode(
    UI_ANIMATION_ROUNDING_MODE_FLOOR
    );
if (SUCCEEDED(hr))
{
    hr = m_pAnimationVariableY->SetRoundingMode(
        UI_ANIMATION_ROUNDING_MODE_FLOOR
        );
    ...
}
上一步
在开始此步骤之前,应已完成此步骤: 创建主动画对象。
下一步
完成此步骤后,下一步是: 更新动画管理器和绘制帧。
相关主题