IUIAnimationManager
COM公式ドキュメント
アニメーションを作成および管理するための中心的なインターフェイスを提供する、アニメーションマネージャーを定義します。
解説(Remarks)
IUIAnimationManager は、アニメーションの中心的な制御オブジェクトを定義します。
通常、クライアントアプリケーションのすべてのアニメーションの構成、スケジュール、管理には、単一の IUIAnimationManager インスタンスを使用します。
IUIAnimationVariable、IUIAnimationTransition、IUIAnimationStoryboard は、アニメーションを構築するための主要なコンポーネントです。
これらのコンポーネントの作成と管理には IUIAnimationManager を使用します。
例
アニメーションマネージャーオブジェクトを作成する例については、Create the Main Animation Objects を参照してください。
メソッド 19
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
新しいアニメーション変数を作成します。(IUIAnimationManager.CreateAnimationVariable)
| initialValue | DOUBLE | in | 新しいアニメーション変数の初期値。 |
| variable | IUIAnimationVariable** | out | 新しいアニメーション変数。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
アニメーション変数の初期値は、変数の作成時に指定します。アニメーション変数の作成後は、その値を直接変更することはできません。値の更新はアニメーションマネージャーを通じて行う必要があります。
通常、アニメーション化する視覚的特性ごとにアニメーション変数を作成します。たとえば、ウィンドウ内を自由に移動できるオブジェクトの X 座標と Y 座標のために、アプリケーションが 2 つのアニメーション変数を作成する、といった具合です。
例
例については、Create Animation Variables を参照してください。
遷移(トランジション)を 1 つだけ含むストーリーボードを作成してスケジュールします。(IUIAnimationManager.ScheduleTransition)
| variable | IUIAnimationVariable* | in | アニメーション変数。 |
| transition | IUIAnimationTransition* | in | アニメーション変数に適用する遷移(トランジション)。 |
| timeNow | DOUBLE | in | 現在のシステム時刻。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドは、ストーリーボードを作成し、指定された遷移を指定されたアニメーション変数に適用したうえで、そのストーリーボードをスケジュールします。
例
次の例では、指定した遷移とアニメーション変数に対するストーリーボードを作成します。
// Get the current time and schedule a single-transition storyboard
UI_ANIMATION_SECONDS secondsNow;
hr = m_pAnimationTimer->GetTime(
&secondsNow
);
if (SUCCEEDED(hr))
{
hr = m_pAnimationManager->ScheduleTransition(
m_pAnimationVariableY,
pTransitionParabolic,
secondsNow
);
...
}
新しいストーリーボードを作成します。(IUIAnimationManager.CreateStoryboard)
| storyboard | IUIAnimationStoryboard** | out | 新しいストーリーボード。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
ストーリーボードでは、多数のアニメーション変数に対する複雑な協調的更新を指定できます。これらの更新は順次または並行して行われ、ストーリーボード内で同期が保たれることが保証されます。ストーリーボードは、作成し、アニメーション変数への遷移を追加したうえで、スケジュールします。
例
例については、Create a Storyboard and Add Transitions を参照してください。
指定された時間内に、アクティブなすべてのストーリーボードを終了させます。(IUIAnimationManager.FinishAllStoryboards)
| completionDeadline | DOUBLE | in | すべてのストーリーボードを終了させなければならない最大の時間間隔。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
FinishAllStoryboards を呼び出すと、アクティブなすべてのストーリーボードが指定された完了期限内に終了するようになります。期限を超えて再生される予定のストーリーボードは圧縮されます。
ストーリーボードは、その状態が UI_ANIMATION_STORYBOARD_PLAYING または UI_ANIMATION_STORYBOARD_SCHEDULED の場合にアクティブと見なされます。
アクティブなすべてのストーリーボードを破棄します。(IUIAnimationManager.AbandonAllStoryboards)
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドの呼び出しは、アクティブな各ストーリーボードに対して IUIAnimationStoryboard::Abandon メソッドを呼び出すことと同等です。
ストーリーボードは、その状態が UI_ANIMATION_STORYBOARD_PLAYING または UI_ANIMATION_STORYBOARD_SCHEDULED の場合にアクティブと見なされます。
すべてのアニメーション変数の値を更新します。(IUIAnimationManager.Update)
| timeNow | DOUBLE | in | 現在のシステム時刻。このパラメーターは 0.0 以上でなければなりません。 |
| updateResult | UI_ANIMATION_UPDATE_RESULT* | outoptional | 更新の結果。 このパラメーターは、このメソッドの呼び出し時に省略できます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。 エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドを呼び出すと、アニメーションマネージャーが timeNow まで進み、必要に応じてストーリーボードの状態が変化し、アニメーション変数が適切な補間値に更新されます。アニメーションマネージャーが一時停止している場合、ストーリーボードも変数も更新されません。アニメーションモードが UI_ANIMATION_MODE_DISABLED の場合、スケジュールされているすべてのストーリーボードは直ちに再生を終了します。この呼び出し中にいずれかの変数の値が変化した場合、updateResult の値は UI_ANIMATION_UPDATE_VARIABLES_CHANGED になります。変化しなかった場合は UI_ANIMATION_UPDATE_NO_CHANGE になります。
例
次の例では、現在の時刻でアニメーションマネージャーを更新します。その他の例については、Update the Animation Manager and Draw Frames を参照してください。
// Update the animation manager with the current time
UI_ANIMATION_SECONDS secondsNow;
hr = m_pAnimationTimer->GetTime(
&secondsNow
);
if (SUCCEEDED(hr))
{
UI_ANIMATION_UPDATE_RESULT updateResult;
hr = m_pAnimationManager->Update(
secondsNow,
&updateResult
);
if (SUCCEEDED(hr))
{
if (updateResult == UI_ANIMATION_UPDATE_VARIABLES_CHANGED)
{
...
}
}
}
指定されたタグを持つアニメーション変数を取得します。(IUIAnimationManager.GetVariableFromTag)
| object | IUnknown* | inoptional | タグのオブジェクト部分。 このパラメーターは NULL でもかまいません。 |
| id | DWORD | in | タグの識別子部分。 |
| variable | IUIAnimationVariable** | out | 指定されたタグに一致するアニメーション変数。一致するものが見つからない場合は NULL。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
タグとは、整数の識別子(id)と COM オブジェクト(object)の組み合わせです。アプリケーションはタグを使用してアニメーション変数やストーリーボードを識別できます。タグのオブジェクト部分としては NULL も有効です。したがって、object パラメーターは NULL でもかまいません。
タグは必ずしも一意ではありません。指定されたタグを持つアニメーション変数が複数存在する場合、このメソッドは UI_E_AMBIGUOUS_MATCH を返します。
指定されたタグを持つストーリーボードを取得します。(IUIAnimationManager.GetStoryboardFromTag)
| object | IUnknown* | inoptional | タグのオブジェクト部分。 このパラメーターは NULL でもかまいません。 |
| id | DWORD | in | タグの識別子部分。 |
| storyboard | IUIAnimationStoryboard** | out | 指定されたタグに一致するストーリーボード。一致するものが見つからない場合は NULL。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
タグとは、整数の識別子(id)と COM オブジェクト(object)の組み合わせです。アプリケーションはタグを使用してアニメーション変数やストーリーボードを識別できます。タグのオブジェクト部分としては NULL も有効です。したがって、object パラメーターは NULL でもかまいません。
タグは必ずしも一意ではありません。指定されたタグを持つストーリーボードが複数存在する場合、このメソッドは UI_E_AMBIGUOUS_MATCH を返します。
アニメーションマネージャーの状態を取得します。(IUIAnimationManager.GetStatus)
| status | UI_ANIMATION_MANAGER_STATUS* | out | 状態。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
アニメーションモードを設定します。(IUIAnimationManager.SetAnimationMode)
| mode | UI_ANIMATION_MODE | in | アニメーションモード。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドは、アニメーションをグローバルに有効または無効にするために使用します。アニメーションが無効になっている間、すべてのストーリーボードはスケジュールされた時点で直ちに終了します。既定のモードは UI_ANIMATION_MODE_SYSTEM_DEFAULT で、アプリケーションでアニメーションを有効にするか無効にするかを Windows が判断します。
すべてのアニメーションを一時停止します。(IUIAnimationManager.Pause)
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
アニメーションマネージャーが一時停止すると、その状態は UI_ANIMATION_MANAGER_IDLE に設定されます。
すべてのアニメーションを再開します。(IUIAnimationManager.Resume)
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
アニメーションマネージャーが再開され、少なくとも 1 つのアニメーションがスケジュール済みまたは再生中である場合、その状態は UI_ANIMATION_MANAGER_BUSY に設定されます。
アニメーションマネージャーの状態更新に対するハンドラーを指定します。(IUIAnimationManager.SetManagerEventHandler)
| handler | IUIAnimationManagerEventHandler* | inoptional | アニメーションマネージャーの状態が変化したときに呼び出されるイベントハンドラー。 指定するオブジェクトは IUIAnimationManagerEventHandler インターフェイスを実装しているか、NULL である必要があります。 詳細については「解説」を参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
handler パラメーターに NULL を渡すと、Windows Animation は以前に渡されたハンドラーオブジェクトへの参照を解放します。この方法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照循環を断ち切るうえで不可欠となる場合があります。
例
例については、Update the Animation Manager and Draw Frames を参照してください。
スケジュール済みのストーリーボードをキャンセルできるかどうかを判断するために呼び出される、優先度比較ハンドラーを設定します。
| comparison | IUIAnimationPriorityComparison* | inoptional | キャンセル用の優先度比較ハンドラー。 指定するオブジェクトは IUIAnimationPriorityComparison インターフェイスを実装しているか、NULL である必要があります。 「解説」を参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドで優先度比較ハンドラーを設定すると、スケジュールの競合をストーリーボードのキャンセルによって解決できる場合を、アプリケーションが指定できるようになります。
スケジュール済みのストーリーボードは、まだ再生が開始されておらず、かつこのメソッドで登録された優先度比較オブジェクトが S_OK を返す場合にのみキャンセルできます。キャンセルされたストーリーボードはスケジュールから完全に削除されます。
comparison パラメーターに NULL を渡すと、Windows Animation は以前に渡された優先度比較ハンドラーオブジェクトへの参照を解放します。この方法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照循環を断ち切るうえで不可欠となる場合があります。
スケジュール済みのストーリーボードをトリミングできるかどうかを判断するために呼び出される、優先度比較ハンドラーを設定します。
| comparison | IUIAnimationPriorityComparison* | inoptional | トリミング用の優先度比較ハンドラー。 指定するオブジェクトは IUIAnimationPriorityComparison インターフェイスを実装しているか、NULL である必要があります。 「解説」を参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドで優先度比較ハンドラーを設定すると、スケジュールの競合をスケジュール済みストーリーボードのトリミングによって解決できる場合を、アプリケーションが指定できるようになります。
スケジュール済みのストーリーボードは、このメソッドで登録された優先度比較オブジェクトが S_OK を返す場合にのみトリミングできます。新しいストーリーボードがスケジュール済みストーリーボードをトリミングした場合、新しいストーリーボードがある変数のアニメーションを開始した時点以降、スケジュール済みストーリーボードはその変数に影響を与えられなくなります。
comparison パラメーターに NULL を渡すと、Windows Animation は以前に渡されたハンドラーオブジェクトへの参照を解放します。この方法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照循環を断ち切るうえで不可欠となる場合があります。
スケジュール済みのストーリーボードを圧縮できるかどうかを判断するために呼び出される、優先度比較ハンドラーを設定します。
| comparison | IUIAnimationPriorityComparison* | inoptional | 圧縮用の優先度比較ハンドラー。 指定するオブジェクトは IUIAnimationPriorityComparison インターフェイスを実装しているか、NULL である必要があります。「解説」を参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドで優先度比較ハンドラーを設定すると、スケジュールの競合を、スケジュール済みストーリーボードおよび同じ変数をアニメーション化する他のストーリーボードを圧縮することで解決できる場合を、アプリケーションが指定できるようになります。
ストーリーボードを圧縮できるのは、圧縮の影響を受ける他のすべてのスケジュール済みストーリーボードについて、このメソッドで登録された優先度比較オブジェクトが S_OK を返す場合のみです。ストーリーボードが圧縮されると、影響を受けるストーリーボードの時間が一時的に加速され、再生が速くなります。
comparison パラメーターに NULL を渡すと、Windows Animation は以前に渡されたハンドラーオブジェクトへの参照を解放します。この方法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照循環を断ち切るうえで不可欠となる場合があります。
スケジュール済みのストーリーボードを終結(conclude)できるかどうかを判断するために呼び出される、優先度比較ハンドラーを設定します。
| comparison | IUIAnimationPriorityComparison* | inoptional | 終結用の優先度比較ハンドラー。指定するオブジェクトは IUIAnimationPriorityComparison インターフェイスを実装しているか、NULL である必要があります。 「解説」を参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドで優先度比較ハンドラーを設定すると、スケジュールの競合をスケジュール済みストーリーボードの終結によって解決できる場合を、アプリケーションが指定できるようになります。
スケジュール済みのストーリーボードを終結できるのは、そのストーリーボードが繰り返し回数 UI_ANIMATION_REPEAT_INDEFINITELY のループを含み、かつこのメソッドで登録された優先度比較オブジェクトが S_OK を返す場合のみです。ストーリーボードが終結されると、現在のループの繰り返しが完了し、その後ストーリーボードの残りの部分が再生されます。
comparison パラメーターに NULL を渡すと、Windows Animation は以前に渡されたハンドラーオブジェクトへの参照を解放します。この方法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照循環を断ち切るうえで不可欠となる場合があります。
既定の許容アニメーション遅延を設定します。これは、ストーリーボードが開始されるまでに経過してもよい時間の長さです。(IUIAnimationManager.SetDefaultLongestAcceptableDelay)
| delay | DOUBLE | in | 既定の遅延。このパラメーターには正の値、または有限の遅延であれば許容されることを示す UI_ANIMATION_SECONDS_EVENTUALLY(-1)を指定できます。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
ストーリーボードが正常にスケジュールされるには、許容される最長の遅延が経過する前に開始される必要があります。この遅延は次の順序で決定されます。まず、対象のストーリーボードに対して IUIAnimationStoryboard::SetLongestAcceptableDelay を呼び出して設定された遅延値、次にこのメソッドを呼び出して設定された遅延値、どちらのメソッドも呼び出されていない場合は 0.0 です。
アニメーションマネージャーおよび関連するすべてのオブジェクトをシャットダウンします。(IUIAnimationManager.Shutdown)
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、Windows Animation Error Codes を参照してください。
解説(Remarks)
このメソッドを呼び出すと、アニメーションマネージャーおよびそれが作成したすべてのオブジェクトに対して、 他のオブジェクトへのポインターをすべて解放するよう指示します。IUIAnimationManager::Shutdown を呼び出した後は、アニメーションマネージャーやそれが作成したオブジェクトに対して他のメソッドを呼び出すことはできません。アプリケーションがアニメーションオブジェクトを含む参照循環を生じさせている可能性がある場合、このメソッドを呼び出してクリーンアップできます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIAnimationManager "{9169896C-AC8D-4E7D-94E5-67FA4DC2F2E8}" #usecom global IUIAnimationManager IID_IUIAnimationManager "{4C1FC63A-695C-47E8-A339-1A194BE3D0B8}" #comfunc global IUIAnimationManager_CreateAnimationVariable 3 double,sptr #comfunc global IUIAnimationManager_ScheduleTransition 4 sptr,sptr,double #comfunc global IUIAnimationManager_CreateStoryboard 5 sptr #comfunc global IUIAnimationManager_FinishAllStoryboards 6 double #comfunc global IUIAnimationManager_AbandonAllStoryboards 7 #comfunc global IUIAnimationManager_Update 8 double,var #comfunc global IUIAnimationManager_GetVariableFromTag 9 sptr,int,sptr #comfunc global IUIAnimationManager_GetStoryboardFromTag 10 sptr,int,sptr #comfunc global IUIAnimationManager_GetStatus 11 var #comfunc global IUIAnimationManager_SetAnimationMode 12 int #comfunc global IUIAnimationManager_Pause 13 #comfunc global IUIAnimationManager_Resume 14 #comfunc global IUIAnimationManager_SetManagerEventHandler 15 sptr #comfunc global IUIAnimationManager_SetCancelPriorityComparison 16 sptr #comfunc global IUIAnimationManager_SetTrimPriorityComparison 17 sptr #comfunc global IUIAnimationManager_SetCompressPriorityComparison 18 sptr #comfunc global IUIAnimationManager_SetConcludePriorityComparison 19 sptr #comfunc global IUIAnimationManager_SetDefaultLongestAcceptableDelay 20 double #comfunc global IUIAnimationManager_Shutdown 21 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IUIAnimationManager "{9169896C-AC8D-4E7D-94E5-67FA4DC2F2E8}" #usecom global IUIAnimationManager IID_IUIAnimationManager "{4C1FC63A-695C-47E8-A339-1A194BE3D0B8}" #comfunc global IUIAnimationManager_CreateAnimationVariable 3 double,sptr #comfunc global IUIAnimationManager_ScheduleTransition 4 sptr,sptr,double #comfunc global IUIAnimationManager_CreateStoryboard 5 sptr #comfunc global IUIAnimationManager_FinishAllStoryboards 6 double #comfunc global IUIAnimationManager_AbandonAllStoryboards 7 #comfunc global IUIAnimationManager_Update 8 double,sptr #comfunc global IUIAnimationManager_GetVariableFromTag 9 sptr,int,sptr #comfunc global IUIAnimationManager_GetStoryboardFromTag 10 sptr,int,sptr #comfunc global IUIAnimationManager_GetStatus 11 sptr #comfunc global IUIAnimationManager_SetAnimationMode 12 int #comfunc global IUIAnimationManager_Pause 13 #comfunc global IUIAnimationManager_Resume 14 #comfunc global IUIAnimationManager_SetManagerEventHandler 15 sptr #comfunc global IUIAnimationManager_SetCancelPriorityComparison 16 sptr #comfunc global IUIAnimationManager_SetTrimPriorityComparison 17 sptr #comfunc global IUIAnimationManager_SetCompressPriorityComparison 18 sptr #comfunc global IUIAnimationManager_SetConcludePriorityComparison 19 sptr #comfunc global IUIAnimationManager_SetDefaultLongestAcceptableDelay 20 double #comfunc global IUIAnimationManager_Shutdown 21 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。