IUIAnimationTimer
COM公式ドキュメント
アニメーションのタイミング管理サービスを提供する、アニメーションタイマーを定義します。
解説(Remarks)
タイマーは、ティックと呼ばれる小さな時間単位の経過を自動的に通知することで、アニメーションのレンダリング管理を支援します。ティックはアニメーションのレンダリングやその他のアニメーションイベントのトリガーとなります。各アニメーションタイマーは、単一のアニメーションマネージャーにタイミングを提供します。
タイミングシステムは、アニメーションのサポートに必要なタイミングサービスを提供するように設計されており、アプリケーションがティックの生成に明示的に関与する必要はありません。アニメーションタイマーは、アプリケーション側で処理を行わなくても、ティックごとにアニメーションマネージャーを自動的に更新するように設定できます。
使用するグラフィックスプラットフォームによっては、アプリケーションが Windows Animation でタイマーを使用する必要がない場合もあります。たとえば、Direct2D や Direct3D で描画するアプリケーションは、モニターのリフレッシュレートに同期でき、非常に滑らかなアニメーションが得られます。ただし、そのようなアプリケーションでも、IUIAnimationTimer インターフェイスの GetTime メソッドは有用です。このメソッドは、Windows Animation API 全体で使用される単位である UI_ANIMATION_SECONDS で正確なシステム時刻を返します。
例
アニメーションタイマーオブジェクトを作成する例については、「Create the Main Animation Objects」を参照してください。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
タイマー更新ハンドラーを指定します。
| updateHandler | IUIAnimationTimerUpdateHandler* | inoptional | タイマー更新ハンドラー、または NULL(「解説」を参照)。指定するオブジェクトは IUIAnimationTimerUpdateHandler インターフェイスを実装している必要があります。 |
| idleBehavior | UI_ANIMATION_IDLE_BEHAVIOR | in | タイマーがアイドル状態のときの動作を指定する UI_ANIMATION_IDLE_BEHAVIOR のメンバー。 |
戻り値
メソッドが成功した場合は S_OK を返します。更新ハンドラーが既にタイマーに接続されている場合は UI_E_TIMER_CLIENT_ALREADY_CONNECTED を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
解説(Remarks)
タイマー更新ハンドラーは、タイマーから時間の更新(ティック)を受け取ります。タイマーは、指定されたハンドラーの
IUIAnimationTimerUpdateHandler::OnUpdate
メソッドを呼び出すことで更新を通知します。
updateHandler パラメーターに NULL を渡すと、Windows Animation は、以前に渡されたハンドラーオブジェクトへの参照を解放します。この手法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照の循環を断ち切るために不可欠となる場合があります。
例
例については、「Update the Animation Manager」を参照してください。
タイマーイベントハンドラーを指定します。
| handler | IUIAnimationTimerEventHandler* | inoptional | タイマーイベントハンドラー。指定するオブジェクトは IUIAnimationTimerEventHandler インターフェイスを実装しているか、NULL である必要があります。「解説」を参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
解説(Remarks)
タイミングイベントには、IUIAnimationTimerEventHandler インターフェイスの OnPreUpdate、 OnPostUpdate、 OnRenderingTooSlow の各メソッドが含まれます。
handler パラメーターに NULL を渡すと、Windows Animation は、以前に渡されたハンドラーオブジェクトへの参照を解放します。この手法は、IUIAnimationManager::Shutdown メソッドを呼び出さずに参照の循環を断ち切るために不可欠となる場合があります。
例
例については、「Update the Animation Manager and Draw Frames」を参照してください。
アニメーションタイマーを有効にします。
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
アニメーションタイマーを無効にします。
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
タイマーが現在有効かどうかを判定します。
戻り値
アニメーションタイマーが有効な場合は S_OK、無効な場合は S_FALSE を返します。エラー時には HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
現在の時刻を取得します。
| seconds | DOUBLE* | out | 現在の時刻(UI_ANIMATION_SECONDS 単位)。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
解説(Remarks)
このメソッドは、アプリケーション駆動型とタイマー駆動型のいずれの構成でも使用でき、Windows Animation API 全体で使用される単位である UI_ANIMATION_SECONDS でシステム時刻を取得します。
例
例については、「Update the Animation Manager and Draw Frames」を参照してください。
レンダリングが遅すぎることをタイマーがアプリケーションに通知する基準となるフレームレートを設定します。
| framesPerSecond | DWORD | in | 望ましい最小フレームレート(フレーム/秒)。 |
戻り値
メソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、「Windows Animation Error Codes」を参照してください。
解説(Remarks)
アニメーションのレンダリングフレームレートが指定したフレームレートを下回ると、 IUIAnimationTimerEventHandler::OnRenderingTooSlow イベントが発生します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIAnimationTimer "{6B0EFAD1-A053-41D6-9085-33A689144665}" #usecom global IUIAnimationTimer IID_IUIAnimationTimer "{BFCD4A0C-06B6-4384-B768-0DAA792C380E}" #comfunc global IUIAnimationTimer_SetTimerUpdateHandler 3 sptr,int #comfunc global IUIAnimationTimer_SetTimerEventHandler 4 sptr #comfunc global IUIAnimationTimer_Enable 5 #comfunc global IUIAnimationTimer_Disable 6 #comfunc global IUIAnimationTimer_IsEnabled 7 #comfunc global IUIAnimationTimer_GetTime 8 var #comfunc global IUIAnimationTimer_SetFrameRateThreshold 9 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IUIAnimationTimer "{6B0EFAD1-A053-41D6-9085-33A689144665}" #usecom global IUIAnimationTimer IID_IUIAnimationTimer "{BFCD4A0C-06B6-4384-B768-0DAA792C380E}" #comfunc global IUIAnimationTimer_SetTimerUpdateHandler 3 sptr,int #comfunc global IUIAnimationTimer_SetTimerEventHandler 4 sptr #comfunc global IUIAnimationTimer_Enable 5 #comfunc global IUIAnimationTimer_Disable 6 #comfunc global IUIAnimationTimer_IsEnabled 7 #comfunc global IUIAnimationTimer_GetTime 8 sptr #comfunc global IUIAnimationTimer_SetFrameRateThreshold 9 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。