您好
查看源代码可以得知 CAccelerateDecelerateTransition是对IUIAnimationTransitionLibrary::CreateAccelerateDecelerateTransition method进行了简单的封装。
pLibrary->CreateAccelerateDecelerateTransition中使用了构造函数和create()里面填入的参数 (create的第二个参数为不使用),并将结果保存到[out]参数&m_transition中。m_transition是父类CBaseTransition的成员变量,使用GetTransition得到值。
源代码:
class CAccelerateDecelerateTransition : public CBaseTransition
{
public:
/// <summary>
/// Constructs a transition object.
/// </summary>
/// <param name="duration">The duration of the transition. </param>
/// <param name="finalValue">The value of the animation variable at the end of the transition. </param>
/// <param name="accelerationRatio">The ratio of the time spent accelerating to the duration.</param>
/// <param name="decelerationRatio">The ratio of the time spent decelerating to the duration. </param>
CAccelerateDecelerateTransition(UI_ANIMATION_SECONDS duration, DOUBLE finalValue, DOUBLE accelerationRatio = 0.3,
DOUBLE decelerationRatio = 0.3) : m_duration(duration), m_finalValue(finalValue),
m_accelerationRatio(accelerationRatio), m_decelerationRatio(decelerationRatio)
{
m_type = ACCELERATE_DECELERATE;
}
public:
/// <summary>
/// The duration of the transition.
/// </summary>
UI_ANIMATION_SECONDS m_duration;
/// <summary>
/// The value of the animation variable at the end of the transition.
/// </summary>
DOUBLE m_finalValue;
/// <summary>
/// The ratio of the time spent accelerating to the duration.
/// </summary>
DOUBLE m_accelerationRatio;
/// <summary>
/// The ratio of the time spent decelerating to the duration.
/// </summary>
DOUBLE m_decelerationRatio;
/// <summary>
/// Calls the transition library to create encapsulated transition COM object.
/// </summary>
/// <returns>
/// TRUE if transition is created successfully; otherwise FALSE.
/// </returns>
/// <param name="pLibrary">A pointer to transition library, which is responsible for creation of standard transitions.</param>
/// <param name="pFactory">A pointer to transition factory, which is responsible for creation of custom transitions.</param>
BOOL Create(IUIAnimationTransitionLibrary* pLibrary, IUIAnimationTransitionFactory* pFactory) override
{
UNREFERENCED_PARAMETER(pFactory);
Clear();
if (pLibrary != NULL)
{
HRESULT hr = pLibrary->CreateAccelerateDecelerateTransition(m_duration, m_finalValue, m_accelerationRatio,m_decelerationRatio, &m_transition);
return SUCCEEDED(hr);
}
return FALSE;
}
};
参考 CreateAccelerateDecelerateTransition Example Code
CoInitialize(NULL);
//填入两个double值
CAccelerateDecelerateTransition transition(1/*DURATION*/,1 /*FinalValue*/);
IUIAnimationTransitionLibrary* m_aniPtr;
auto hr = CoCreateInstance(
CLSID_UIAnimationTransitionLibrary,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&m_aniPtr)
);
bool res = transition.Create(m_aniPtr, NULL);
//
CoUninitialize();
res返回true则转换创建成功。
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。