创建动画变量
应用程序必须为要使用 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
);
...
}
上一步
在开始此步骤之前,应已完成此步骤: 创建主动画对象。
下一步
完成此步骤后,下一步是: 更新动画管理器和绘制帧。
相关主题